最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中WinForm控件的拖動和縮放的實現(xiàn)代碼

 更新時間:2017年01月25日 10:44:29   作者:十日十乞001  
本篇文章主要介紹了C#中WinForm控件的拖動和縮放的實現(xiàn)代碼,C# WinForm控件的拖動和縮放是個很有用的功能,有興趣的可以了解一下。

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

1、定義一個枚舉類型,描述光標(biāo)狀態(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  // '鼠標(biāo)拖動  
  }  

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è)計一個函數(shù),確定光標(biāo)在控件不同位置的樣式   

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è)計的函數(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; //'記錄光標(biāo)拖動的當(dāng)前點  
    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; //'記錄光標(biāo)拖動的當(dāng)前點  
    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; //'記錄光標(biāo)拖動的當(dāng)前點  
    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; //'記錄光標(biāo)拖動的當(dāng)前點  
    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; //'記錄光標(biāo)拖動的當(dāng)前點  
    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);  //'判斷光標(biāo)的位置狀態(tài)  
   switch (m_MousePointPosition)  //'改變光標(biāo)  
   {  
   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í)行程序,應(yīng)該可以隨便移動、改變其大小了 

C# WinForm控件的拖動和縮放的實現(xiàn)就此完成。 

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#實現(xiàn)SMTP服務(wù)發(fā)送郵件的示例代碼

    C#實現(xiàn)SMTP服務(wù)發(fā)送郵件的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實現(xiàn)SMTP服務(wù)發(fā)送郵件的功能,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • C#多態(tài)詳解

    C#多態(tài)詳解

    這篇文章主要介紹了C#中的多態(tài),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-10-10
  • C# 匿名方法基礎(chǔ)回顧

    C# 匿名方法基礎(chǔ)回顧

    本篇文章主要介紹了C#的匿名方法的參數(shù)使用范圍以及委托示例。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • C# UDP網(wǎng)絡(luò)通信的實現(xiàn)示例

    C# UDP網(wǎng)絡(luò)通信的實現(xiàn)示例

    UDP協(xié)議是互聯(lián)網(wǎng)上使用最廣泛的傳輸協(xié)議之一,具有簡單、高效和不可靠的特點,本文主要介紹了C# UDP網(wǎng)絡(luò)通信的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • C# SDK實現(xiàn)百度云OCR的文字識別功能

    C# SDK實現(xiàn)百度云OCR的文字識別功能

    這篇文章主要為大家詳細(xì)介紹了C# SDK實現(xiàn)百度云OCR的文字識別功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • C#實現(xiàn)軟件開機(jī)自啟動功能(不需要管理員權(quán)限)

    C#實現(xiàn)軟件開機(jī)自啟動功能(不需要管理員權(quán)限)

    在本文中,我們探討了如何使用C#語言實現(xiàn)應(yīng)用程序在系統(tǒng)啟動時自動運行的功能,同時避免了對管理員權(quán)限的需求,文章通過代碼示例講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2025-04-04
  • C#中判斷本地系統(tǒng)的網(wǎng)絡(luò)連接狀態(tài)的方法

    C#中判斷本地系統(tǒng)的網(wǎng)絡(luò)連接狀態(tài)的方法

    C#中一般通過InternetGetConnectedState函數(shù)返回本地系統(tǒng)的網(wǎng)絡(luò)連接狀態(tài),下面簡單介紹下,需要的朋友可以參考下
    2013-10-10
  • C#折線圖控件使用方法詳解

    C#折線圖控件使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了C#折線圖控件的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C#如何綁定多個按鈕到同一個事件

    C#如何綁定多個按鈕到同一個事件

    這篇文章主要介紹了C#如何綁定多個按鈕到同一個事件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • async and await 的入門基礎(chǔ)操作

    async and await 的入門基礎(chǔ)操作

    本篇文章對async and await 的入門基礎(chǔ)操作進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評論

九寨沟县| 云阳县| 那坡县| 南平市| 绥滨县| 长治县| 大余县| 玉树县| 石渠县| 栾川县| 清苑县| 怀来县| 鄱阳县| 亚东县| 玉环县| 普兰县| 潼关县| 抚顺县| 凤台县| 太湖县| 兰溪市| 平泉县| 搜索| 隆尧县| 昆山市| 武宁县| 都安| 肥东县| 多伦县| 三穗县| 化州市| 巨野县| 闽清县| 开江县| 洪泽县| 临澧县| 延长县| 乌拉特前旗| 遂溪县| 巴彦淖尔市| 金阳县|