日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C#WinForm控件的拖動(dòng)和縮放的實(shí)現(xiàn)

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

專注于為中小企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)麻城免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了1000多家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

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

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

 
 
 
  1. private enum EnumMousePointPosition  
  2.    {  
  3.     MouseSizeNone   = 0, //'無  
  4.     MouseSizeRight   = 1, //'拉伸右邊框  
  5.     MouseSizeLeft   = 2, //'拉伸左邊框  
  6.     MouseSizeBottom   = 3, //'拉伸下邊框  
  7.     MouseSizeTop   = 4, //'拉伸上邊框  
  8.     MouseSizeTopLeft = 5, //'拉伸左上角  
  9.     MouseSizeTopRight = 6, //'拉伸右上角  
  10.     MouseSizeBottomLeft = 7, //'拉伸左下角  
  11.     MouseSizeBottomRight= 8, //'拉伸右下角  
  12.     MouseDrag    = 9   // '鼠標(biāo)拖動(dòng)  
  13.    } 

2、定義幾個(gè)變量

 
 
 
  1. const int Band = 5;  
  2.    const int MinWidth=10;  
  3.    const int MinHeight=10;  
  4.    private EnumMousePointPosition m_MousePointPosition;  
  5.    private Point p,p1; 

3、定義自己的MyMouseDown事件

 
 
 
  1. private void MyMouseDown(object sender,System.Windows.Forms.MouseEventArgs e)  
  2. {  
  3.  p.X=e.X;  
  4.  p.Y=e.Y;  
  5.  p1.X=e.X;  
  6.  p1.Y=e.Y;     

4、定義自己的MyMouseLeave事件

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

5、設(shè)計(jì)一個(gè)函數(shù),確定光標(biāo)在控件不同位置的樣式

 
 
 
  1. private EnumMousePointPosition MousePointPosition(Size size,System.Windows.Forms.MouseEventArgs e)  
  2. {  
  3.  
  4.  if ((e.X >= -1 * Band) | (e.X <= size.Width) | (e.Y >= -1 * Band) | (e.Y <= size.Height))   
  5.  {  
  6.   if (e.X < Band)   
  7.   {  
  8.    if (e.Y < Band) {return EnumMousePointPosition.MouseSizeTopLeft;}  
  9.    else   
  10.    {  
  11.     if (e.Y > -1 * Band + size.Height)   
  12.     {return EnumMousePointPosition.MouseSizeBottomLeft;}  
  13.     else   
  14.     {return EnumMousePointPosition.MouseSizeLeft;}  
  15.    }  
  16.   }  
  17.   else 
  18.   {  
  19.    if (e.X > -1 * Band + size.Width)  
  20.    {  
  21.     if (e.Y < Band)  
  22.     {return EnumMousePointPosition.MouseSizeTopRight;}  
  23.     else   
  24.     {  
  25.      if (e.Y > -1 * Band + size.Height)  
  26.      {return EnumMousePointPosition.MouseSizeBottomRight;}  
  27.      else 
  28.      {return EnumMousePointPosition.MouseSizeRight;}  
  29.     }  
  30.    }  
  31.    else 
  32.    {  
  33.     if (e.Y < Band)   
  34.     {return EnumMousePointPosition.MouseSizeTop;}  
  35.     else 
  36.     {  
  37.      if (e.Y > -1 * Band + size.Height)   
  38.      {return EnumMousePointPosition.MouseSizeBottom;}  
  39.      else   
  40.      {return EnumMousePointPosition.MouseDrag;}  
  41.     }  
  42.    }  
  43.   }  
  44.  }  
  45.  else   
  46.  {return EnumMousePointPosition.MouseSizeNone;}  

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

 
 
 
  1.    private void MyMouseMove(object sender,System.Windows.Forms.MouseEventArgs e)  
  2.    {  
  3.     Control lCtrl =(sender as Control);  
  4.  
  5.     if (e.Button==MouseButtons.Left)  
  6.     {  
  7.      switch (m_MousePointPosition)  
  8.      {  
  9.       case EnumMousePointPosition.MouseDrag:        
  10.        lCtrl.Left =lCtrl.Left+ e.X - p.X;  
  11.        lCtrl.Top =lCtrl.Top+ e.Y - p.Y;  
  12.        break;  
  13.       case EnumMousePointPosition.MouseSizeBottom:  
  14.        lCtrl.Height = lCtrl.Height + e.Y - p1.Y;  
  15.        p1.X=e.X;  
  16.        p1.Y=e.Y; //'記錄光標(biāo)拖動(dòng)的當(dāng)前點(diǎn)  
  17.        break;  
  18.       case EnumMousePointPosition.MouseSizeBottomRight:  
  19.        lCtrl.Width   = lCtrl.Width + e.X - p1.X;  
  20.        lCtrl.Height = lCtrl.Height + e.Y - p1.Y;  
  21.        p1.X=e.X;  
  22.        p1.Y=e.Y; //'記錄光標(biāo)拖動(dòng)的當(dāng)前點(diǎn)  
  23.        break;  
  24.       case EnumMousePointPosition.MouseSizeRight:  
  25.        lCtrl.Width   = lCtrl.Width + e.X - p1.X;        
  26. //       lCtrl.Height = lCtrl.Height + e.Y - p1.Y;  
  27.        p1.X=e.X;  
  28.        p1.Y=e.Y; //'記錄光標(biāo)拖動(dòng)的當(dāng)前點(diǎn)  
  29.        break;  
  30.       case EnumMousePointPosition.MouseSizeTop:  
  31.        lCtrl.Top   = lCtrl.Top + (e.Y - p.Y);  
  32.        lCtrl.Height = lCtrl.Height - (e.Y - p.Y);  
  33.        break;  
  34.       case EnumMousePointPosition.MouseSizeLeft:  
  35.        lCtrl.Left   = lCtrl.Left + e.X - p.X;  
  36.        lCtrl.Width   = lCtrl.Width - (e.X - p.X);  
  37.        break;  
  38.       case EnumMousePointPosition.MouseSizeBottomLeft:  
  39.        lCtrl.Left   = lCtrl.Left + e.X - p.X;  
  40.        lCtrl.Width   = lCtrl.Width - (e.X - p.X);  
  41.        lCtrl.Height = lCtrl.Height+ e.Y - p1.Y;  
  42.        p1.X=e.X;  
  43.        p1.Y=e.Y; //'記錄光標(biāo)拖動(dòng)的當(dāng)前點(diǎn)  
  44.        break;  
  45.       case EnumMousePointPosition.MouseSizeTopRight:  
  46.        lCtrl.Top   = lCtrl.Top + (e.Y - p.Y);  
  47.        lCtrl.Width   = lCtrl.Width + (e.X - p1.X);  
  48.        lCtrl.Height = lCtrl.Height - (e.Y - p.Y);  
  49.        p1.X=e.X;  
  50.        p1.Y=e.Y; //'記錄光標(biāo)拖動(dòng)的當(dāng)前點(diǎn)  
  51.        break;  
  52.       case EnumMousePointPosition.MouseSizeTopLeft:  
  53.        lCtrl.Left   = lCtrl.Left + e.X - p.X;  
  54.        lCtrl.Top   = lCtrl.Top + (e.Y - p.Y);  
  55.        lCtrl.Width   = lCtrl.Width - (e.X - p.X);  
  56.        lCtrl.Height = lCtrl.Height - (e.Y - p.Y);  
  57.        break;  
  58.       default:  
  59.        break;  
  60.      }  
  61.      if (lCtrl.Width
  62.      if (lCtrl.Height
  63.  
  64.     }  
  65.     else 
  66.     {  
  67.      m_MousePointPosition = MousePointPosition(lCtrl.Size, e);   //'判斷光標(biāo)的位置狀態(tài)  
  68.      switch (m_MousePointPosition)   //'改變光標(biāo)  
  69.      {  
  70.       case EnumMousePointPosition.MouseSizeNone:  
  71.        this.Cursor = Cursors.Arrow;        //'箭頭  
  72.        break;  
  73.       case EnumMousePointPosition.MouseDrag:  
  74.        this.Cursor = Cursors.SizeAll;      //'四方向  
  75.        break;  
  76.       case EnumMousePointPosition.MouseSizeBottom:  
  77.        this.Cursor = Cursors.SizeNS;       //'南北  
  78.        break;  
  79.       case EnumMousePointPosition.MouseSizeTop:  
  80.        this.Cursor = Cursors.SizeNS;       //'南北  
  81.        break;  
  82.       case EnumMousePointPosition.MouseSizeLeft:  
  83.        this.Cursor = Cursors.SizeWE;       //'東西  
  84.        break;  
  85.       case EnumMousePointPosition.MouseSizeRight:  
  86.        this.Cursor = Cursors.SizeWE;       //'東西  
  87.        break;  
  88.       case EnumMousePointPosition.MouseSizeBottomLeft:  
  89.        this.Cursor = Cursors.SizeNESW;     //'東北到南西  
  90.        break;  
  91.       case EnumMousePointPosition.MouseSizeBottomRight:  
  92.        this.Cursor = Cursors.SizeNWSE;     //'東南到西北  
  93.        break;  
  94.       case EnumMousePointPosition.MouseSizeTopLeft:  
  95.        this.Cursor = Cursors.SizeNWSE;     //'東南到西北  
  96.        break;  
  97.       case EnumMousePointPosition.MouseSizeTopRight:  
  98.        this.Cursor = Cursors.SizeNESW;     //'東北到南西  
  99.        break;  
  100.       default:  
  101.        break;  
  102.      }  
  103.     }  
  104.  
  105.    }  

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

 
 
 
  1. private void initProperty()  
  2. {  
  3.  for(int i = 0; i < this.panel1.Controls.Count; i++)   
  4.  {   
  5.   this.panel1.Controls[i].MouseDown+= new System.Windows.Forms.MouseEventHandler(MyMouseDown);  
  6.   this.panel1.Controls[i].MouseLeave+= new System.EventHandler(MyMouseLeave);  
  7.   this.panel1.Controls[i].MouseMove += new System.Windows.Forms.MouseEventHandler(MyMouseMove);  
  8.  }  
  9.  
  10. }  

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

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


本文標(biāo)題:C#WinForm控件的拖動(dòng)和縮放的實(shí)現(xiàn)
文章起源:http://www.5511xx.com/article/cddpocd.html