C#中WinForm控件的拖动和缩放的实现代码

2019-12-30 16:12:42王振洲


  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;  
   }  
  }  
  
  }