溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何利用C# WinForm實現(xiàn)控件的拖動和縮放

發(fā)布時間:2021-06-16 14:21:18 來源:億速云 閱讀:560 作者:chen 欄目:編程語言

本篇內(nèi)容主要講解“如何利用C# WinForm實現(xiàn)控件的拖動和縮放”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何利用C# WinForm實現(xiàn)控件的拖動和縮放”吧!

C# WinForm控件的拖動和縮放是個很有用的功能。實現(xiàn)起來其實很簡單的,主要是設計控件的MouseDown、MouseLeave、MouseMove事件

下面的幾個步驟將逐步實現(xiàn)C# WinForm控件的拖動和縮放的功能。

1、定義一個枚舉類型,描述光標狀態(tài)

private enum EnumMousePointPosition     {      MouseSizeNone   = 0, //'無      MouseSizeRight   = 1, //'拉伸右邊框      MouseSizeLeft   = 2, //'拉伸左邊框      MouseSizeBottom   = 3, //'拉伸下邊框      MouseSizeTop   = 4, //'拉伸上邊框      MouseSizeTopLeft = 5, //'拉伸左上角      MouseSizeTopRight = 6, //'拉伸右上角      MouseSizeBottomLeft = 7, //'拉伸左下角      MouseSizeBottomRight= 8, //'拉伸右下角      MouseDrag    = 9   // '鼠標拖動     }

2、定義幾個變量

const int Band = 5;     const int MinWidth=10;     const int MinHeight=10;     private EnumMousePointPosition m_MousePointPosition;     private Point p,p1;

3、定義自己的MyMouseDown事件

private void MyMouseDown(object sender,System.Windows.Forms.MouseEventArgs e)  {   p.X=e.X;   p.Y=e.Y;   p1.X=e.X;   p1.Y=e.Y;     }

4、定義自己的MyMouseLeave事件

private void MyMouseLeave(object sender, System.EventArgs e)  {   m_MousePointPosition = EnumMousePointPosition.MouseSizeNone;   this.Cursor=Cursors.Arrow;  }

5、設計一個函數(shù),確定光標在控件不同位置的樣式

private EnumMousePointPosition MousePointPosition(Size size,System.Windows.Forms.MouseEventArgs e)  {    if ((e.X >= -1 * Band) | (e.X <= size.Width) | (e.Y >= -1 * Band) | (e.Y <= size.Height))    {    if (e.X < Band)     {     if (e.Y < Band) {return EnumMousePointPosition.MouseSizeTopLeft;}     else      {      if (e.Y > -1 * Band + size.Height)       {return EnumMousePointPosition.MouseSizeBottomLeft;}      else       {return EnumMousePointPosition.MouseSizeLeft;}     }    }    else   {     if (e.X > -1 * Band + size.Width)     {      if (e.Y < Band)      {return EnumMousePointPosition.MouseSizeTopRight;}      else       {       if (e.Y > -1 * Band + size.Height)       {return EnumMousePointPosition.MouseSizeBottomRight;}       else      {return EnumMousePointPosition.MouseSizeRight;}      }     }     else    {      if (e.Y < Band)       {return EnumMousePointPosition.MouseSizeTop;}      else     {       if (e.Y > -1 * Band + size.Height)        {return EnumMousePointPosition.MouseSizeBottom;}       else        {return EnumMousePointPosition.MouseDrag;}      }     }    }   }   else    {return EnumMousePointPosition.MouseSizeNone;}  }

6、定義自己的MyMouseMove事件,在這個事件里,會使用上面設計的函數(shù)

   private void MyMouseMove(object sender,System.Windows.Forms.MouseEventArgs e)     {      Control lCtrl =(sender as Control);       if (e.Button==MouseButtons.Left)      {       switch (m_MousePointPosition)       {        case EnumMousePointPosition.MouseDrag:               lCtrl.Left =lCtrl.Left+ e.X - p.X;         lCtrl.Top =lCtrl.Top+ e.Y - p.Y;         break;        case EnumMousePointPosition.MouseSizeBottom:         lCtrl.Height = lCtrl.Height + e.Y - p1.Y;         p1.X=e.X;         p1.Y=e.Y; //'記錄光標拖動的當前點         break;        case EnumMousePointPosition.MouseSizeBottomRight:         lCtrl.Width   = lCtrl.Width + e.X - p1.X;         lCtrl.Height = lCtrl.Height + e.Y - p1.Y;         p1.X=e.X;         p1.Y=e.Y; //'記錄光標拖動的當前點         break;        case EnumMousePointPosition.MouseSizeRight:         lCtrl.Width   = lCtrl.Width + e.X - p1.X;        //       lCtrl.Height = lCtrl.Height + e.Y - p1.Y;         p1.X=e.X;         p1.Y=e.Y; //'記錄光標拖動的當前點         break;        case EnumMousePointPosition.MouseSizeTop:         lCtrl.Top   = lCtrl.Top + (e.Y - p.Y);         lCtrl.Height = lCtrl.Height - (e.Y - p.Y);         break;        case EnumMousePointPosition.MouseSizeLeft:         lCtrl.Left   = lCtrl.Left + e.X - p.X;         lCtrl.Width   = lCtrl.Width - (e.X - p.X);         break;        case EnumMousePointPosition.MouseSizeBottomLeft:         lCtrl.Left   = lCtrl.Left + e.X - p.X;         lCtrl.Width   = lCtrl.Width - (e.X - p.X);         lCtrl.Height = lCtrl.Height+ e.Y - p1.Y;         p1.X=e.X;         p1.Y=e.Y; //'記錄光標拖動的當前點         break;        case EnumMousePointPosition.MouseSizeTopRight:         lCtrl.Top   = lCtrl.Top + (e.Y - p.Y);         lCtrl.Width   = lCtrl.Width + (e.X - p1.X);         lCtrl.Height = lCtrl.Height - (e.Y - p.Y);         p1.X=e.X;         p1.Y=e.Y; //'記錄光標拖動的當前點         break;        case EnumMousePointPosition.MouseSizeTopLeft:         lCtrl.Left   = lCtrl.Left + e.X - p.X;         lCtrl.Top   = lCtrl.Top + (e.Y - p.Y);         lCtrl.Width   = lCtrl.Width - (e.X - p.X);         lCtrl.Height = lCtrl.Height - (e.Y - p.Y);         break;        default:         break;       }       if (lCtrl.Width<MinWidth) lCtrl.Width=MinWidth;       if (lCtrl.Height<MinHeight) lCtrl.Height=MinHeight;             }      else     {       m_MousePointPosition = MousePointPosition(lCtrl.Size, e);   //'判斷光標的位置狀態(tài)       switch (m_MousePointPosition)   //'改變光標       {        case EnumMousePointPosition.MouseSizeNone:         this.Cursor = Cursors.Arrow;        //'箭頭         break;        case EnumMousePointPosition.MouseDrag:         this.Cursor = Cursors.SizeAll;      //'四方向         break;        case EnumMousePointPosition.MouseSizeBottom:         this.Cursor = Cursors.SizeNS;       //'南北         break;        case EnumMousePointPosition.MouseSizeTop:         this.Cursor = Cursors.SizeNS;       //'南北         break;        case EnumMousePointPosition.MouseSizeLeft:         this.Cursor = Cursors.SizeWE;       //'東西         break;        case EnumMousePointPosition.MouseSizeRight:         this.Cursor = Cursors.SizeWE;       //'東西         break;        case EnumMousePointPosition.MouseSizeBottomLeft:         this.Cursor = Cursors.SizeNESW;     //'東北到南西         break;        case EnumMousePointPosition.MouseSizeBottomRight:         this.Cursor = Cursors.SizeNWSE;     //'東南到西北         break;        case EnumMousePointPosition.MouseSizeTopLeft:         this.Cursor = Cursors.SizeNWSE;     //'東南到西北         break;        case EnumMousePointPosition.MouseSizeTopRight:         this.Cursor = Cursors.SizeNESW;     //'東北到南西         break;        default:         break;       }      }      }

7、制作一個初始化過程,將界面panel1上的所有控件都綁定MyMouseDown、MyMouseLeave、MyMouseMove事件,記得在Form初始化或者Form_Load時先執(zhí)行它。

private void initProperty()  {   for(int i = 0; i < this.panel1.Controls.Count; i++)    {     this.panel1.Controls[i].MouseDown+= new System.Windows.Forms.MouseEventHandler(MyMouseDown);    this.panel1.Controls[i].MouseLeave+= new System.EventHandler(MyMouseLeave);    this.panel1.Controls[i].MouseMove += new System.Windows.Forms.MouseEventHandler(MyMouseMove);   }   }

8、ok,在運行之前你在panel1上放幾個控件,執(zhí)行程序,應該可以隨便移動、改變其大小了

到此,相信大家對“如何利用C# WinForm實現(xiàn)控件的拖動和縮放”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI