自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

開發(fā) 后端
C# WinForm控件的拖動和縮放實現(xiàn)起來其實很簡單,主要是設(shè)計控件的MouseDown、MouseLeave、MouseMove事件。

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

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

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

2、定義幾個變量

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

  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事件,在這個事件里,會使用上面設(shè)計的函數(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; //'記錄光標拖動的當前點  
  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; //'記錄光標拖動的當前點  
  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; //'記錄光標拖動的當前點  
  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; //'記錄光標拖動的當前點  
  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; //'記錄光標拖動的當前點  
  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<MinWidth) lCtrl.Width=MinWidth;  
  62.      if (lCtrl.Height<MinHeight) lCtrl.Height=MinHeight;        
  63.  
  64.     }  
  65.     else 
  66.     {  
  67.      m_MousePointPosition = MousePointPosition(lCtrl.Size, e);   //'判斷光標的位置狀態(tài)  
  68.      switch (m_MousePointPosition)   //'改變光標  
  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、制作一個初始化過程,將界面panel1上的所有控件都綁定MyMouseDown、MyMouseLeave、MyMouseMove事件,記得在Form初始化或者Form_Load時先執(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,在運行之前你在panel1上放幾個控件,執(zhí)行程序,應(yīng)該可以隨便移動、改變其大小了

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

【編輯推薦】

  1. Winform中C#線程控制的四種常見情況分析
  2. 解析C# Winform刷新窗口
  3. WinForm應(yīng)用與開發(fā)視頻教程-WinForm教程
  4. 淺談C#開發(fā)WinForm
  5. 描述C#開發(fā)WinForm
責(zé)任編輯:yangsai 來源: 博客園
相關(guān)推薦

2009-09-11 11:04:23

C# WinForm自

2009-10-10 14:54:44

treeView1控件

2009-09-11 10:41:20

C# WinForm控

2009-09-11 11:33:58

C# WinForm控Attribute

2009-09-11 12:07:12

C# WinForm控

2009-08-07 13:03:10

C#控件數(shù)組

2021-03-13 14:02:16

C#控件動態(tài)

2015-07-09 09:00:43

C#Winform透明動畫

2009-09-11 12:52:09

C# WinForm控編輯器

2009-09-07 03:58:42

WinForm傳值

2009-08-17 15:48:47

C# WinForm進

2009-09-11 12:31:15

C# WinForm控設(shè)置默認值

2009-08-26 09:54:45

C#打印預(yù)覽C#打印

2009-09-11 12:17:59

C#控件屬性

2009-08-20 09:30:03

C#開發(fā)WinForm

2009-08-20 10:24:52

C#開發(fā)WinForm

2009-08-11 10:12:21

2009-08-26 17:28:48

C# DateTime

2009-08-11 15:46:15

C#日歷控件

2009-08-13 10:42:31

C#窗體拖動事件
點贊
收藏

51CTO技術(shù)棧公眾號