Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

DragExtender - An extenderprovider for dragging functionality

0.00/5 (No votes)
28 Oct 2004 1  
An extenderprovider for dragging functionality.

Sample Image - DragExtender.jpg

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:

// make the form draggable

this.dragExtender1.SetDraggable(this, true);
// make panel1 draggable

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

  • Version 1.0, 28-10-2004.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here