Introduction
This is a piece of code that I wrote to simplify creating borderless forms.
Background
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 InitializeComponent()
:
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:
this.dragExtender1.SetDraggable(this, true);
this.dragExtender1.SetDraggable(this.panel1, true);
The 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;
ReleaseCapture(control.Handle);
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.
History