Using System; Using System.Windows.Forms; Using System.Drawing; Summary description of namespace Imagetool {/**////<summary>///controlmove. </summary> public class Controlmove {#region private define Private Const int min_size = 10;//The minimum value of the control scaling private cons t int box_size = 7; Resize Touch Handle box size public bool _isctrlkey = FALSE; Private TextBox _textbox; Private control _mcontrol = null; private bool _ismousedown = false; Private point _opointclicked; Private Color box_color = Color.White; Private label[] _lbl = new Label[8]; private int _startl, _startt, _STARTW, _starth; private bool _dragging; Private cursor[] _arrarrow = new cursor[] {cursors.sizenwse, cursors.sizens, CURSORS.SIZENESW, Cursors.sizewe, Cursors.sizenwse, Cursors.sizens, CURSORS.SIZENESW, Cursors.sizewe}; #endregion #region Constructors/**////<summary>///Construction Controls Drag objects///</summary>///<param name= "Movecontrol" > Need to drag Moving controls </param> public controlmove (Control Movecontrol) {///TODO: Add constructor logic//_mcontrol here = MovecOntrol; _mcontrol.mousedown + = new MouseEventHandler (this. Control_mousedown); _mcontrol.mouseup + = new MouseEventHandler (this. Control_mouseup); _mcontrol.mousemove + = new MouseEventHandler (this. Control_mousemove); _mcontrol.click + = new System.EventHandler (this. Control_click); Constructs 8 sizing touch handles for (int i = 0; i<8; i++) {_lbl[i] = new Label (); _lbl[i]. TabIndex = i; _lbl[i]. FlatStyle = 0; _lbl[i]. BorderStyle = BorderStyle.FixedSingle; _lbl[i]. BackColor = Box_color; _lbl[i]. Cursor = _arrarrow[i]; _lbl[i]. Text = ""; _lbl[i]. BringToFront (); _lbl[i]. MouseDown + = new MouseEventHandler (This.handle_mousedown); _lbl[i]. MouseMove + = new MouseEventHandler (this.handle_mousemove); _lbl[i]. MouseUp + = new MouseEventHandler (this.handle_mouseup); } createtextbox (); Create (); Control_click ((object) sender, (System.EventArgs) e); #endregion #region need to drag the control keyboard event private void Textbox_keydown (object sender, System.Windows.Forms.KeyEventArgs e) {if e.ke Yvalue = 37 | | E.keyvalue = 38 | | E.keyvalue = 39 || E.keyvalue = = (E.keyvalue = =) {if (= 1) _mcontrol.left-if (e.keyvalue = =) _mcontrol.top-=1; if (E.keyvalue = = (a) _mcontrol.left + 1; if (E.keyvalue = =) _mcontrol.top +=1; Movehandles (); Controllocality (); _mcontrol.visible = true; } if (E.keyvalue = = 0; i<8; i++) {_mcontrol.parent.controls.remove (_lbl[i)); _mcontrol.parent.con Trols. Remove (_mcontrol); _textbox. Parent.Controls.Remove (_textbox); } if (E.keyvalue = = _isctrlkey = true;//messagebox.show ("a");} #endregion #region need to drag the control mouse event private void Control_click (object sender, System.EventArgs e) {_textbox. Focus (); _mcontrol = (sender as control); Movehandles (); if (_isctrlkey = = False) {for (int i=0;i<_mcontrol.parent.controls.count;i++) {if (_mcontrol.parent.controls[i). Text.trim (). Length = = 0 && _mcontrol.parent.controls[i] is Label) {_mcontrol.parent.controls[i]. Visible = false; }}} private void Control_mousedown (object sender, System.Windows.Forms.MouseEventArgs E{_ismousedown = true; _opointclicked = new Point (E.X,E.Y), for (int i = 0; i<8; i++) {_mcontrol.parent.controls.add (_lbl[i]); _lbl[i]. BringToFront (); } hidehandles (); } private void Control_mouseup (object sender, System.Windows.Forms.MouseEventArgs e) {_ismousedown = false; Movehandles (); Showhandles (); _mcontrol.visible = true; } private void Control_mousemove (object sender, System.Windows.Forms.MouseEventArgs e) {if (_ismousedown) {int L = _mcont Rol. Left + e.x-_opointclicked.x; int t = _mcontrol.top + e.y-_opointclicked.y; int w = _mcontrol.width; int h = _mcontrol.height; L = (l<0)? 0: ((l+w > _mcontrol.parent.clientrectangle.width)? _MCONTROL.PARENT.CLIENTRECTANGLE.WIDTH-W:L); t = (t<0)? 0: ((t+h> _mcontrol.parent.clientrectangle.height)? _MCONTROL.PARENT.CLIENTRECTANGLE.HEIGHT-H:T); _mcontrol.left = l; _mcontrol.top = t; Controllocality (); }//_mcontrol.cursor=cursors.sizeall; #endregion #region Resize Touch handle mouse event private void Handle_mousedown (object sender, MouseeveNtargs e) {_dragging = true; _startl = _mcontrol.left; _startt = _mcontrol.top; _startw = _mcontrol.width; _starth = _MCo Ntrol. Height; Hidehandles (); /////0 1 2//7 3//6 5 + private void Handle_mousemove (object sender, MouseEventArgs e) {int L = _mcontr Ol. Left; int w = _mcontrol.width; int t = _mcontrol.top; int h = _mcontrol.height; if (_dragging) {switch ((Label) sender). TabIndex) {//l algorithm: Control left x coordinate + mouse on touch handle x coordinate < control left X coordinate + parent control width-control size. Control left X coordinate + mouse touch handle x coordinate: control left X coordinate + parent control width-Control size//t algorithm://w algorithm://h algorithm: Case 0://_dragging top-left sizing Box L = _startl + E. X < _startl + _startw-min_size? _startl + e.x: _startl + _startw-min_size; t = _startt + e.y < _startt + _starth-min_size? _startt + e.y: _startt + _starth-min_size; W = _startl + _STARTW-_mcontrol.left; H = _startt + _starth-_mcontrol.top; Break Case 1://_dragging top-center sizing Box T = _startt + e.y < _startt + _starth-min_size? _startt + e.y: _startt + _starth-min_size; H = _startt + _starth-_mcontrol.top; Break Case 2://_dragging top-right sizing Box W = _startw + e.x > min_size? _STARTW + e.x:min_size; t = _startt + e.y < _startt + _starth-min_size? _startt + e.y: _startt + _starth-min_size; H = _startt + _starth-_mcontrol.top; Break Case 3://_dragging right-middle sizing Box W = _startw + e.x > min_size? _STARTW + e.x:min_size; Break Case 4://_dragging right-bottom sizing Box W = _startw + e.x > min_size? _STARTW + e.x:min_size; H = _starth + e.y > min_size? _starth + e.y:min_size; Break Case 5://_dragging center-bottom Sizing Box H = _starth + e.y > min_size? _starth + e.y:min_size; Break Case 6://_dragging left-bottom sizing Box L = _startl + e.x < _startl + _startw-min_size? _startl + e.x: _startl + _startw-min_size; W = _startl + _STARTW-_mcontrol.left; H = _starth + e.y > min_size? _starth + e.y:min_size; Break Case 7://_dragging left-middle sizing Box L = _startl + E. X < _startl + _startw-min_size? _startl + e.x: _startl + _startw-min_size; W = _startl + _STARTW-_mcontrol.left; Break L = (l<0) 0:l; t = (t<0) 0:t; _mcontrol.setbounds (L,T,W,H); } private void Handle_mouseup (object sender, MouseEventArgs e) {_dragging = false; Movehandles (); Showhandles (); #endregion Private Method #region Private method private void Create () {//_ismousedown = true;//_opointclicked = new Point (e.x,e. Y); for (int i = 0; i<8; i++) {_mcontrol.parent.controls.add (_lbl[i)); _lbl[i]. BringToFront (); } hidehandles (); private void CreateTextbox () {_textbox = new TextBox (); _textbox. CreateControl (); _textbox. Parent = _mcontrol.parent; _textbox. Width = 0; _textbox. Height = 0; _textbox. TabStop = true; _textbox. KeyDown + = new System.Windows.Forms.KeyEventHandler (Textbox_keydown); private void Controllocality () {if (_mcontrol.location.x < 0) {_mcontrol.visible = false; _mcontrol.left = 0;} if (_MCONTROL.LOCATION.Y < 0) {_mcontrol.visible = false; _mcontrol.top = 0; } if (_mcontrol.location.x + _mcontrol.width > _mcontrol.parent.width) {_mcontrol.visible = false; _mcontrol.left = _M Control.Parent.Width-_mcontrol.width; } if (_mcontrol.location.y + _mcontrol.height > _mcontrol.parent.height) {_mcontrol.visible = false; _MControl.Top = _ MControl.Parent.Height-_mcontrol.height; } private void Hidehandles () {for (int i = 0; i<8; i++) {_lbl[i]. Visible = false; } private void Movehandles () {int sX = _mcontrol.left-box_size int sY = _mcontrol.top-box_size; int SW = _mcontrol . Width + box_size; int SH = _mcontrol.height + box_size; int HB = BOX_SIZE/2; int[] Arrposx = new int[] {SX+HB, SX + SW/2, SX + SW-HB, SX + SW-HB, SX + SW-HB, SX + SW/2, SX+HB, SX+HB}; int[] Arrposy = new int[] {SY+HB, SY+HB, SY+HB, sy + SH/2, sy + SH-HB, sy + SH-HB, sy + SH-HB, sy + SH/2}; for (int i=0; i<8; i++) {_lbl[i]. SetBounds (Arrposx[i], arrposy[i], box_size, box_size); }} private void Showhandles () {if (_mcontrol!=null) {for (int i = 0; i<8; i++) {_lbl[i]. Visible = true; }}} #endregion}}