Click here to Skip to main content
11,581,982 members (79,548 online)
Click here to Skip to main content

Tagged as

A Resizable Graphical Rectangle

, 4 Nov 2008 CPOL 62.4K 5K 59
Rate this:
Please Sign up or sign in to vote.
An object associated with a pictureBox managing callback to manipulate the rectangle area.
IMG102.jpg

Introduction 

This article wants to introduce a Resizable graphical Rectangle (UserRect) which can be resized and moved.  

It's really simple to use.   

This object is built with a Rectangle, and is associated with a paintbox.
It shows 8 handles to be resized. If the user clicks on one of these, then s/he can resize the rectangle.
If the user clicks inside the rectangle, then s/he can move the rectangle into the paintbox.

(Sorry for my English, I'm French, but I want to share this with you, and donate it to this great website.)

Background 

In a graphical application, the user needs a rectangular graphical zone for a selection.

The features of this object are as follows: 

  • Shows the handle to resize the rectangle
  • Shows the cursor when the user moves the mouse on the handle
  • Reacts to the move event

It adds callback event to a pictureBox and treats a mouse event.

Using the Code  

To use the object, create a Windows project, add a pictureBox to the main form, and construct the UserRect:

public Form1()
{
     InitializeComponent();
     rect = new UserRect(new Rectangle(10, 10, 100, 100));
     rect.SetPictureBox(this.pictureBox1);
}

If you want to access the new Rectangle value, the UserRect gets a public rect variable:  

public class UserRect 
    {        
        public Rectangle rect;

The public functions are:

  • public void Draw(Graphics g); 
  • public void SetPictureBox(PictureBox p); 

The private functions are:

Events adding to PictureBox:

  • private void mPictureBox_MouseDown(object sender, MouseEventArgs e); 
  • private void mPictureBox_MouseUp(object sender, MouseEventArgs e); 
  • private void mPictureBox_MouseMove(object sender, MouseEventArgs e);

Functions treat handles, and modification of cursor:

  • private Rectangle CreateRectSizableNode(int x, int y)
  • private Rectangle GetRect(PosSizableRect p); 
  • private PosSizableRect GetNodeSelectable(Point p)
  • private void ChangeCursor(Point p)
  • private Cursor GetCursor(PosSizableRect p)

Points of Interest

There's one interesting thing. This object associates and treats events of pictureBox alone. You don't need to have all events in your mainform class. There's something missing, if you delete the object then the events are not to be deleted. Object UserRect gets a new variable allowDeformingDuringMovement. If it's true, then when you move the rectangle, you can deform the rect's size on the board.

History

There's a point I want to add that it's a rotation manipulation. 

I updated the source, and now the rectangle is always in control.  

I add a checkbox to allow or not the deformation when the rectangle goes out of the box.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

zebulon75018
Software Developer (Senior) http://www.cmb-soft.com/
France France
No Biography provided

You may also be interested in...

Comments and Discussions

 
QuestionCrop Pin
Member 1118208510-May-15 22:56
memberMember 1118208510-May-15 22:56 
QuestionCan you convert this project to VB.Net Pin
TienVung17-Mar-14 21:07
memberTienVung17-Mar-14 21:07 
QuestionAspect Ratio Pin
gaiboten16-Jun-13 1:54
membergaiboten16-Jun-13 1:54 
QuestionDeletion Function Pin
Member 848494525-Apr-13 5:35
memberMember 848494525-Apr-13 5:35 
QuestionHi Pin
ali_motamed27-Mar-13 9:37
memberali_motamed27-Mar-13 9:37 
QuestionHow to cropping image using this article Pin
Ramesha Jogihalli21-Jun-12 2:11
memberRamesha Jogihalli21-Jun-12 2:11 
QuestionA Small Doubt.. Pin
PankajMishra20-Apr-12 8:18
memberPankajMishra20-Apr-12 8:18 
GeneralMy vote of 5 Pin
manoj kumar choubey26-Feb-12 21:10
membermanoj kumar choubey26-Feb-12 21:10 
QuestionRemove rectangle Pin
shivamshukla22@gmail.com4-Dec-11 21:01
membershivamshukla22@gmail.com4-Dec-11 21:01 
AnswerRe: Remove rectangle Pin
paijopkl29-Oct-14 18:18
memberpaijopkl29-Oct-14 18:18 
Questionresizable rectangle in java Pin
ajay17may2-Aug-10 7:48
memberajay17may2-Aug-10 7:48 
GeneralRemove Rectangles Pin
abhi_261012-May-10 13:11
memberabhi_261012-May-10 13:11 
QuestionCan we add more than one rectangle on the same form? [modified] Pin
wonzery7-Feb-10 21:55
memberwonzery7-Feb-10 21:55 
GeneralExtra functions added, No black area bug and some autoposition methods Pin
Maxxi869-Sep-09 4:14
memberMaxxi869-Sep-09 4:14 
GeneralSuggested changes to code [modified] Pin
Member 460340528-Oct-08 6:55
memberMember 460340528-Oct-08 6:55 
GeneralRe: Suggested changes to code Pin
zebulon7501828-Oct-08 13:47
memberzebulon7501828-Oct-08 13:47 
GeneralRe: Suggested changes to code Pin
Christian Wikander14-Nov-08 2:28
memberChristian Wikander14-Nov-08 2:28 
GeneralRe: Suggested changes to code Pin
scottpj15-Nov-08 17:38
memberscottpj15-Nov-08 17:38 
GeneralRe: Suggested changes to code Pin
Christian Wikander16-Nov-08 20:53
memberChristian Wikander16-Nov-08 20:53 
GeneralBugs Pin
netJP12L28-Oct-08 5:22
membernetJP12L28-Oct-08 5:22 
GeneralRe: Bugs Pin
zebulon7501828-Oct-08 14:03
memberzebulon7501828-Oct-08 14:03 
GeneralRe: Bugs Pin
netJP12L28-Oct-08 18:03
membernetJP12L28-Oct-08 18:03 
GeneralRe: Bugs Pin
zebulon7501829-Oct-08 5:52
memberzebulon7501829-Oct-08 5:52 
GeneralI can't change the last screenshot , there's a checkbox ( allow deformation ). Pin
zebulon7501827-Oct-08 14:50
memberzebulon7501827-Oct-08 14:50 
GeneralRe: I can't change the last screenshot , there's a checkbox ( allow deformation ). Pin
Ilíon28-Oct-08 1:16
memberIlíon28-Oct-08 1:16 

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.

| Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.150603.1 | Last Updated 4 Nov 2008
Article Copyright 2008 by zebulon75018
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid