C # Implementation Control drag __c#

Source: Internet
Author: User

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}}

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.