Introduction
This is useful when you have a form without any border and you want to allow the user to drag it. This is a simple code and doesn't require any explanation at all. But I feel this will be helpful for at least some of you for your development. If you set the BorderStyle
of a form to None
, no title bar will be available for you to move the form. Here you can make use of this simple code to setup a base form and inherit all your form from this base form. After inheriting from this base form, you will be provided with two more properties in the Property Editor, Draggable
(boolean) and ExcludeList
(String
). By setting the Draggable
property to true
, you are enabling the draggable feature of the form. You can pass a comma separated list of controls for which you don't want the draggable feature to be enabled. That is by default if Draggable=true
, the form will be draggable by clicking anywhere on the form and any controls on the form. And naturally, you don't want the form draggable while a user clicks on a Button
on it. So you can pass the name of the button
to this list. E.g.: ExcludeList = "button1, button2, button3";
.
FormBase.cs
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace DraggableForm
{
public class FormBase :Form
{
#region Declarations
private bool drag = false;
private Point start_point = new Point(0, 0);
private bool draggable = true;
private string exclude_list = "";
private System.ComponentModel.IContainer components = null;
#endregion
#region Constructor , Dispose
public FormBase()
{
InitializeComponent();
this.MouseDown += new MouseEventHandler(Form_MouseDown);
this.MouseUp += new MouseEventHandler(Form_MouseUp);
this.MouseMove += new MouseEventHandler(Form_MouseMove);
}
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#endregion
#region Windows Form Designer generated code
private void InitializeComponent()
{
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(369, 182);
this.Name = "FormBase";
this.Text = "AlerterForm";
}
#endregion
#region Overriden Functions
protected override void OnControlAdded(ControlEventArgs e)
{
if (this.Draggable && (this.ExcludeList.IndexOf(e.Control.Name) == -1))
{
e.Control.MouseDown += new MouseEventHandler(Form_MouseDown);
e.Control.MouseUp += new MouseEventHandler(Form_MouseUp);
e.Control.MouseMove += new MouseEventHandler(Form_MouseMove);
}
base.OnControlAdded(e);
}
#endregion
#region Event Handlers
void Form_MouseDown(object sender, MouseEventArgs e)
{
this.drag = true;
this.start_point = new Point(e.X, e.Y);
}
void Form_MouseUp(object sender, MouseEventArgs e)
{
this.drag = false;
}
void Form_MouseMove(object sender, MouseEventArgs e)
{
if (this.drag)
{
Point p1 = new Point(e.X, e.Y);
Point p2 = this.PointToScreen(p1);
Point p3 = new Point(p2.X - this.start_point.X,
p2.Y - this.start_point.Y);
this.Location = p3;
}
}
#endregion
#region Properties
public string ExcludeList
{
set
{
this.exclude_list = value;
}
get
{
return this.exclude_list.Trim();
}
}
public bool Draggable
{
set
{
this.draggable = value;
}
get
{
return this.draggable;
}
}
#endregion
}
}
Now, you can simply inherit your form from the FormBase
and voila, it'll be draggable. If you have any suggestions, please mail me. I love to have friends and that's the reason I am here. Happy coding!