This is a piece of code that I wrote to simplify creating borderless forms.
Have you ever used a borderless form? You have to write your own move handlers. If you include (e.g.) a panel on that form, you have to write move handlers for that as well. So, I wrote a little
IExtenderProvider implementation to provide this functionality. You can use this code in other ways (with a little tweaking perhaps), e.g., to move controls around a form.
Using the code
I have yet to integrate this code into the Forms Designer to make it a no-brainer to use. Using it in its current form is very easy, however:
Add the extender as a
private variable to the form.
private DragExtender dragExtender1;
In the constructor, add the following after the call to
this.dragExtender1 = new DragExtender();
You should also specify which component should be the drag target (this leaves a lot of room for experiments):
this.dragExtender1.Form = this;
The only code left is to assign draggable controls:
DragExtender then captures the
OnMouseDown event of that control and handles the dragging code:
private void control_MouseDown(object sender, MouseEventArgs e)
if (!DesignMode && m_form!=null)
Control control = sender as Control;
int nul =0;
SendMessage(m_form.Handle, WM_SYSCOMMAND, MOUSE_MOVE, ref nul);
Points of Interest
I will try to integrate Windows Forms designer functionality for the next update.