This article wants to introduce a Resizable graphical
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
It shows 8 handles to be resized. If the user clicks on one of these, then s/he can resize the
If the user clicks inside the
rectangle, then s/he can move the
rectangle into the
(Sorry for my English, I'm French, but I want to share this with you, and donate it to this great website.)
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
rect = new UserRect(new Rectangle(10, 10, 100, 100));
If you want to access the new
Rectangle value, the
UserRect gets a
public rect variable:
public class UserRect
public Rectangle rect;
public functions are:
private functions are:
Events adding to
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)
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.
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.