Click here to Skip to main content
Click here to Skip to main content

Simple Runtime Control Sizing and Dragging Class

By , 29 Sep 2003
 

Figure - Form showing selected Label control, following selection

Introduction

The PickBox class provides sizing handles that allow the positioning and sizing on simple controls on a containing form. This C# sample was adapted from an earlier version of the class written in VB (version 6). The sample was prepared using Borland's C# Builder IDE and exported to a VS project.

Using the code

The PickBox class exposes a "WireControl" method that attaches events to a passed control, implementing “pickbox” behavior. Clicking on a “wired” control displays eight sizing handles around the perimeter of the control and enables sizing and dragging of the control via mouse event handlers provided by the class instance (see commented code for details). The following snippet illustrates the use of the PickBox class and this function from within the Sample Form:

//(Excerpt from Winform.cs)
//
// Create an instance of the PickBox class
//
private PickBox pb = new PickBox();
public WinForm() // Sample Form's constuctor
{
    InitializeComponent();
    //
    // Provide a Click event handler for each control
    // that attaches a pick box to the control when clicked
    //
    foreach (Control c in this.Controls) {
        pb.WireControl(c);
    }
}

The "WireControl" method attaches a Click event handler to each passed control. When called the event handler then attaches the "pickbox", made up of eight Label controls that act as sizing handles, to the clicked control. In addition, mouse event handlers are attached to the control allowing for dragging of the control on its parent form.

//(Excerpt from PickBox.cs)
private void SelectControl(object sender, EventArgs e) {
    if (m_control is Control) {
        m_control.Cursor = oldCursor;
        // Remove event any event handlers appended to last control
        // by this class
        m_control.MouseDown -= new MouseEventHandler(this.ctl_MouseDown);
        m_control.MouseMove -= new MouseEventHandler(this.ctl_MouseMove);
        m_control.MouseUp -= new MouseEventHandler(this.ctl_MouseUp);
        m_control.Click -= new EventHandler(this.SelectControl);
        m_control = null;
    }
    m_control = (Control)sender;
    //Add event handlers for moving the selected control around
    m_control.MouseDown += new MouseEventHandler(this.ctl_MouseDown);
    m_control.MouseMove += new MouseEventHandler(this.ctl_MouseMove);
    m_control.MouseUp += new MouseEventHandler(this.ctl_MouseUp);
    //Add sizing handles to Control's container (Form or PictureBox)
    for (int i = 0; i<8; i++) {
        m_control.Parent.Controls.Add(lbl[i]);
        lbl[i].BringToFront();
    }
    //Position sizing handles around Control
    MoveHandles();
    //Display sizing handles
    ShowHandles();
    oldCursor = m_control.Cursor;
    m_control.Cursor = Cursors.SizeAll;
}

The sizing handles are Labels that are created, initialized and stored in an array of Label controls when the instance of the PickBox class is constructed. MouseDown, MouseMove, and MouseUp events service the array of Labels during control sizing operations.

Points of Interest

The class sample works well for simple applications, but may exhibit some interaction within applications employing more complicated, time-critical event handling. In it’s current form it provides for the selection of only one control at a time.

The PickBox sample is a simpler, and probably less versatile C# example of the functionality presented in the C++ sample “A Sizing/Moving widget” by Andrew JM Hall.

History

  • This is the initial submission of the sample.

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

About the Author

Jim Korovessis
Program Manager General Dynamics Canada
Canada Canada
Member
Manager, Customer Training in Ottawa, ON, Canada
www.gdcanada.com

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
QuestionThanks! PinmemberMember 96500768 Apr '13 - 9:59 
QuestionConstrain Proportions PinmemberMember 773856116 Jun '12 - 5:10 
QuestionHow to create multiple selection on panel. Pinmembertinku313 May '12 - 21:04 
I am creating panel as form. Depending on particular panel i am adding controls to that panel .
 

 
like that i am adding some no of controls on panel .
 

 
How to create multiple selection ,Moving of controls at runtime like in Visual studio design time environment .,cut,copy ,paste of those controls under selection . to another panel or with in panel .???
 
like that i am having shape from PPacks
 
For all type of controls how to get multiple selection ,drag n drop , move
GeneralThank Very Much Pinmembersanaz13x5 Jan '12 - 23:37 
SuggestionGreat article PinmemberSudarshan.chandan@gs.com13 Oct '11 - 22:34 
GeneralRe: Great article Pinmembersteffen_dec4 Jun '12 - 3:38 
QuestionGreat patent - Any license? PinmemberMember 76904269 Oct '11 - 13:50 
AnswerRe: Great patent - Any license? PinmemberJim Korovessis11 Oct '11 - 1:39 
GeneralMy vote of 5 PinmemberBharat Mallapur14 Apr '11 - 1:01 
AnswerUpdated with multiple selection Pinmemberecklerpa21 Apr '09 - 9:17 
GeneralPickBox and Pictureboxes PinmemberJuwi_uk4 Mar '09 - 5:04 
GeneralMultiple controls drag n drop. [modified] PinmemberVB 8.020 Feb '09 - 1:45 
GeneralGreate code Pinmemberammar7926 Jan '09 - 22:04 
GeneralAdaptation for multiple selection (more than one selected control). [modified] PinmemberDiego Osorio26 Dec '08 - 16:43 
GeneralRe: Adaptation for multiple selection (more than one selected control). Pinmemberammar7926 Jan '09 - 22:12 
GeneralRe: Adaptation for multiple selection (more than one selected control). PinmemberDiego Osorio27 Jan '09 - 1:23 
GeneralDragging between containers Pinmemberdkalyan12 May '08 - 18:30 
GeneralGreat Work BUT !!!! Pinmemberzooooooz10 May '08 - 2:11 
GeneralResize Control @ Runtime Pinmemberferozasi22 Apr '08 - 12:00 
GeneralMoving with keyboard Question Pinmemberblakadm13 Apr '08 - 23:53 
GeneralRe: Moving with keyboard Question Pinmemberjazzyvishal21 Jul '08 - 19:51 
Questionhow labels are selected which are created at button click event Pinmemberjassi4u2 Aug '07 - 19:43 
GeneralNice Article!!! PinmemberIrfan Kothari11 Apr '07 - 0:32 
Questionhow about rotating ? PinmemberThe Code Guru19 Jan '07 - 13:25 
AnswerRe: how about rotating ? PinmemberJK Rajesh30 Jan '07 - 18:59 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web04 | 2.6.130516.1 | Last Updated 30 Sep 2003
Article Copyright 2003 by Jim Korovessis
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid