在运行时通过鼠标拖动移动控件位置及改变控件的大小

public   class   Resize  
  {  
   
  bool   IsMoving=false;  
  int   ctrlLastWidth=0;  
  int   ctrlLastHeight=0;  
  int   ctrlWidth;  
  int   ctrlHeight;  
  int   ctrlLeft;  
  int   ctrlTop;  
  int   cursorL;  
  int   cursorT;  
  int   ctrlLastLeft;  
  int   ctrlLastTop;  
  int   Htap;  
  int   Wtap;  
  bool   ctrlIsResizing=false;  
  System.Drawing.Rectangle   ctrlRectangle   =   new   System.Drawing.Rectangle();  
  private   Control   ctrl;  
  private   Form   frm;  
  public   Resize(Control   c,Form   frm)  
  {  
  ctrl=c;  
  this.frm=frm;  
  this.Htap=this.frm.Height-this.frm.ClientRectangle.Height;  
  this.Wtap=this.frm.Width-this.frm.ClientRectangle.Width;  
  ctrl.MouseDown+=new   MouseEventHandler(MouseDown);  
  ctrl.MouseMove+=new   MouseEventHandler(MouseMove);  
  ctrl.MouseUp+=new   MouseEventHandler(MouseUp);  
  }  
  private   void   MouseMove(object   sender,MouseEventArgs   e)  
  {  
  if   (frm==null)  
  return;  
  if   (e.Button==MouseButtons.Left)  
  {  
  if(this.IsMoving)  
  {  
  if   (ctrlLastLeft   ==   0)  
  ctrlLastLeft   =   ctrlLeft;  
  if   (ctrlLastTop==0)  
  ctrlLastTop   =   ctrlTop;  
  int   locationX=(Cursor.Position.X-this.cursorL+this.frm.DesktopLocation.X+this.Wtap+this.ctrl.Location.X);  
  int   locationY=(Cursor.Position.Y-this.cursorT+this.frm.DesktopLocation.Y+this.Htap+this.ctrl.Location.Y);  
  if(locationX<this.frm.DesktopLocation.X+this.Wtap)  
  locationX=this.frm.DesktopLocation.X+this.Wtap;  
  if(locationY<this.frm.DesktopLocation.Y+this.Htap)  
  locationY=this.frm.DesktopLocation.Y+this.Htap;  
  this.ctrlLeft=locationX;  
  this.ctrlTop=locationY;  
  ctrlRectangle.Location   =   new   System.Drawing.Point(this.ctrlLastLeft,this.ctrlLastTop);  
  ctrlRectangle.Size   =   new   System.Drawing.Size(ctrlWidth,ctrlHeight);  
  ControlPaint.DrawReversibleFrame(ctrlRectangle,   Color.Empty,   System.Windows.Forms.FrameStyle.Dashed);  
  ctrlLastLeft   =   ctrlLeft;  
  ctrlLastTop   =   ctrlTop;  
  ctrlRectangle.Location   =   new   System.Drawing.Point(ctrlLeft,ctrlTop);  
  ctrlRectangle.Size   =   new   System.Drawing.Size(ctrlWidth,ctrlHeight);  
  ControlPaint.DrawReversibleFrame(ctrlRectangle,   Color.Empty,   System.Windows.Forms.FrameStyle.Dashed);  
  return;  
  }  
  int   sizeageX   =   (Cursor.Position.X-this.frm.DesktopLocation.X-this.Wtap-this.ctrl.Location.X);  
  int   sizeageY   =   (Cursor.Position.Y-this.frm.DesktopLocation.Y-this.Htap-this.ctrl.Location.Y);  
  if   (sizeageX   <   2)  
  sizeageX   =   1;  
  if   (sizeageY   <   2)  
  sizeageY   =   1;  
  ctrlWidth   =   sizeageX;  
  ctrlHeight   =   sizeageY;  
  if   (ctrlLastWidth   ==   0)  
  ctrlLastWidth   =   ctrlWidth;  
  if   (ctrlLastHeight==0)  
  ctrlLastHeight   =   ctrlHeight;  
  if   (ctrlIsResizing)  
  {  
  ctrlRectangle.Location   =   new   System.Drawing.Point(this.frm.DesktopLocation.X+this.ctrl.Left+this.Wtap,this.frm.DesktopLocation.Y+this.Htap+this.ctrl.Top);  
  ctrlRectangle.Size   =   new   System.Drawing.Size(ctrlLastWidth,ctrlLastHeight);  
  }  
  ctrlIsResizing   =   true;  
  ControlPaint.DrawReversibleFrame(ctrlRectangle,   Color.Empty,   System.Windows.Forms.FrameStyle.Dashed);  
  ctrlLastWidth   =   ctrlWidth;  
  ctrlLastHeight   =   ctrlHeight;  
  ctrlRectangle.Location   =   new   System.Drawing.Point(this.frm.DesktopLocation.X+this.Wtap+this.ctrl.Left,this.frm.DesktopLocation.Y+this.Htap+this.ctrl.Top);  
  ctrlRectangle.Size   =   new   System.Drawing.Size(ctrlWidth,ctrlHeight);  
  ControlPaint.DrawReversibleFrame(ctrlRectangle,   Color.Empty,   System.Windows.Forms.FrameStyle.Dashed);  
  }  
  }  
  private     void   MouseDown(object   sender,MouseEventArgs   e)  
  {  
  if   (frm==null)  
  return;  
  if   (e.X<this.ctrl.Width-10||e.Y<this.ctrl.Height-10)  
  {  
  this.IsMoving=true;  
  this.ctrlLeft=this.frm.DesktopLocation.X+this.Wtap+this.ctrl.Left;  
  this.ctrlTop=this.frm.DesktopLocation.Y+this.Htap+this.ctrl.Top;  
  this.cursorL=Cursor.Position.X;  
  this.cursorT=Cursor.Position.Y;  
  this.ctrlWidth=this.ctrl.Width;  
  this.ctrlHeight=this.ctrl.Height;  
  }  
  ctrlRectangle.Location   =   new   System.Drawing.Point(this.ctrlLeft,this.ctrlTop);  
  ctrlRectangle.Size   =   new   System.Drawing.Size(ctrlWidth,ctrlHeight);  
  ControlPaint.DrawReversibleFrame(ctrlRectangle,   Color.Empty,   System.Windows.Forms.FrameStyle.Dashed);  
  }  
  private   void   MouseUp(object   sender,MouseEventArgs   e)  
  {  
  if   (frm==null)  
  return;  
  ctrlIsResizing   =   false;  
  if   (this.IsMoving)  
  {  
  ctrlRectangle.Location   =   new   System.Drawing.Point(this.ctrlLeft,this.ctrlTop);  
  ctrlRectangle.Size   =   new   System.Drawing.Size(ctrlWidth,ctrlHeight);  
  ControlPaint.DrawReversibleFrame(ctrlRectangle,   Color.Empty,   System.Windows.Forms.FrameStyle.Dashed);  
  this.ctrl.Left=this.ctrlLeft-this.frm.DesktopLocation.X-this.Wtap;  
  this.ctrl.Top=this.ctrlTop-this.frm.DesktopLocation.Y-this.Htap;  
  this.IsMoving=false;  
  this.ctrl.Refresh();  
  return;  
  }  
  ctrlRectangle.Location   =   new   System.Drawing.Point(this.frm.DesktopLocation.X+this.Wtap+this.ctrl.Left,this.frm.DesktopLocation.Y+this.Htap+this.ctrl.Top);  
  ctrlRectangle.Size   =   new   System.Drawing.Size(ctrlWidth,ctrlHeight);  
  ControlPaint.DrawReversibleFrame(ctrlRectangle,   Color.Empty,   System.Windows.Forms.FrameStyle.Dashed);  
  this.ctrl.Width   =   ctrlWidth;  
  this.ctrl.Height   =   ctrlHeight;  
  this.ctrl.Refresh();  
  }  
  }  
   
  }   
 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值