成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C# WinForm控件的拖動和縮放的實現

開發 后端
C# WinForm控件的拖動和縮放實現起來其實很簡單,主要是設計控件的MouseDown、MouseLeave、MouseMove事件。

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

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

1、定義一個枚舉類型,描述光標狀態

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

  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事件,在這個事件里,會使用上面設計的函數

  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);   //'判斷光標的位置狀態  
  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時先執行它。

  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上放幾個控件,執行程序,應該可以隨便移動、改變其大小了

C# WinForm控件的拖動和縮放的實現就此完成。

【編輯推薦】

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

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#控件數組

2021-03-13 14:02:16

C#控件動態

2015-07-09 09:00:43

C#Winform透明動畫

2009-09-07 03:58:42

WinForm傳值

2009-09-11 12:52:09

C# WinForm控編輯器

2009-08-17 15:48:47

C# WinForm進

2009-09-11 12:31:15

C# WinForm控設置默認值

2009-08-20 09:30:03

C#開發WinForm

2009-08-26 09:54:45

C#打印預覽C#打印

2009-09-11 12:17:59

C#控件屬性

2009-08-20 10:24:52

C#開發WinForm

2009-08-11 10:12:21

2009-08-11 15:46:15

C#日歷控件

2009-08-26 17:28:48

C# DateTime

2009-08-13 10:42:31

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

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品国产三级国产aⅴ浪潮 | 欧美另类日韩 | 欧美久久久久久久久中文字幕 | 高清av一区 | 国产美女一区二区 | 91在线最新 | 亚洲一区在线观看视频 | 亚洲一区二区三区视频在线 | 成人av在线大片 | 福利视频大全 | 丁香五月缴情综合网 | 日本久久一区二区三区 | 国产精品99久久久久久久久久久久 | 一区二区不卡高清 | 一区二区三区四区国产 | 亚洲国产激情 | 一级做a爰片久久毛片免费看 | 午夜天堂精品久久久久 | 日韩在线小视频 | 男女在线网站 | 免费看91 | 国产成人午夜高潮毛片 | 国内自拍偷拍 | 亚洲一区二区在线视频 | 欧美综合自拍 | 久久久久久久久久久久亚洲 | 99久热在线精品视频观看 | 欧美一a | 成人免费网站视频 | 黄色在线免费网站 | 亚洲精品1区2区3区 91免费看片 | 黄色大全免费看 | 亚洲欧美一区二区在线观看 | 午夜精品影院 | 亚洲女人天堂成人av在线 | 在线国产视频 | av天天看| 国产在线精品免费 | 精品欧美一区二区久久久伦 | 久色激情 | 成人午夜电影在线观看 |