65.9K
CodeProject is changing. Read more.
Home

DragExtender - An extenderprovider for dragging functionality

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.65/5 (12 votes)

Oct 28, 2004

1 min read

viewsIcon

38897

downloadIcon

812

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.