程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中WinForm控件的拖動和縮放的完成代碼

C#中WinForm控件的拖動和縮放的完成代碼

編輯:C#入門知識

C#中WinForm控件的拖動和縮放的完成代碼。本站提示廣大學習愛好者:(C#中WinForm控件的拖動和縮放的完成代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是C#中WinForm控件的拖動和縮放的完成代碼正文


C# WinForm控件的拖動和縮放是個很有用的功用。完成起來其實很復雜的,次要是設計控件的MouseDown、MouseLeave、MouseMove事情,上面的幾個步驟將逐漸完成C# WinForm控件的拖動和縮放的功用。

1、定義一個枚舉類型,描繪光標形態  

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

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事情,在這個事情裡,會運用下面設計的函數    

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

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

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

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支持。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved