Home  >  Article  >  Backend Development  >  Code sharing for dragging and zooming implementation of WinForm control in C#

Code sharing for dragging and zooming implementation of WinForm control in C#

黄舟
黄舟Original
2017-03-23 13:13:222129browse

This article mainly introduces the implementation code of dragging and scaling of WinForm control in C#. Dragging and scaling of C# WinForm control is a very useful function. Those who are interested can learn about it.

C# The dragging and zooming of WinForm controls is a very useful function. The implementation is actually very simple. It mainly involves designing the MouseDown, MouseLeave, and MouseMove events of the control. The following steps will gradually implement the dragging and scaling functions of the C# WinForm control.

1. Define an enumeration type to describe the cursor status

private enum EnumMousePointPosition  
  {  
  MouseSizeNone  = 0, //'无  
  MouseSizeRight  = 1, //'拉伸右边框  
  MouseSizeLeft  = 2, //'拉伸左边框  
  MouseSizeBottom  = 3, //'拉伸下边框  
  MouseSizeTop  = 4, //'拉伸上边框  
  MouseSizeTopLeft = 5, //'拉伸左上角  
  MouseSizeTopRight = 6, //'拉伸右上角  
  MouseSizeBottomLeft = 7, //'拉伸左下角  
  MouseSizeBottomRight= 8, //'拉伸右下角  
  MouseDrag  = 9  // '鼠标拖动  
  }

2. Define several variables

 const int Band = 5;  
  const int MinWidth=10;  
  const int MinHeight=10;  
  private EnumMousePointPosition m_MousePointPosition;  
  private Point p,p1;

3 , define your own MyMouseDown event

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, define your own MyMouseLeave event

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

5, design a function to determine the style of the cursor at different positions of the control

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. Define your own MyMouseMove event. In this event, the function designed above will be used.

  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; //&#39;记录光标拖动的当前点  
    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; //&#39;记录光标拖动的当前点  
    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; //&#39;记录光标拖动的当前点  
    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; //&#39;记录光标拖动的当前点  
    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; //&#39;记录光标拖动的当前点  
    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);  //&#39;判断光标的位置状态  
   switch (m_MousePointPosition)  //&#39;改变光标  
   {  
   case EnumMousePointPosition.MouseSizeNone:  
    this.Cursor = Cursors.Arrow;    //&#39;箭头  
    break;  
   case EnumMousePointPosition.MouseDrag:  
    this.Cursor = Cursors.SizeAll;   //&#39;四方向  
    break;  
   case EnumMousePointPosition.MouseSizeBottom:  
    this.Cursor = Cursors.SizeNS;    //&#39;南北  
    break;  
   case EnumMousePointPosition.MouseSizeTop:  
    this.Cursor = Cursors.SizeNS;    //&#39;南北  
    break;  
   case EnumMousePointPosition.MouseSizeLeft:  
    this.Cursor = Cursors.SizeWE;    //&#39;东西  
    break;  
   case EnumMousePointPosition.MouseSizeRight:  
    this.Cursor = Cursors.SizeWE;    //&#39;东西  
    break;  
   case EnumMousePointPosition.MouseSizeBottomLeft:  
    this.Cursor = Cursors.SizeNESW;   //&#39;东北到南西  
    break;  
   case EnumMousePointPosition.MouseSizeBottomRight:  
    this.Cursor = Cursors.SizeNWSE;   //&#39;东南到西北  
    break;  
   case EnumMousePointPosition.MouseSizeTopLeft:  
    this.Cursor = Cursors.SizeNWSE;   //&#39;东南到西北  
    break;  
   case EnumMousePointPosition.MouseSizeTopRight:  
    this.Cursor = Cursors.SizeNESW;   //&#39;东北到南西  
    break;  
   default:  
    break;  
   }  
  }  
  
  }

7. Make an initialization process and bind all controls on the interface panel1 to MyMouseDown and MyMouseLeave. , MyMouseMove event, remember to execute it first when Form is initialized or 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, before running, you put a few controls on panel1 and execute the program. You should be able to move and change the size at will

C# Dragging of WinForm controls The implementation of scaling is complete.

The above is the detailed content of Code sharing for dragging and zooming implementation of WinForm control in C#. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn