.net,C#如何在运行时通过鼠标拖动改变控件的大小

using  System;
using  System.Collections.Generic;
using  System.Text;
using  System.Data;
using  System.Windows.Forms;
using  System.Drawing;

namespace  WindowsApplication2
{
    
class ResizeAction
    
{
        
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 ResizeAction(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);
        }

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

        }

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

        
public 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();
        }


    }

}


调用:
 
private   void  Form1_Load( object  sender, EventArgs e)
        
{
            
//WindowsApplication2.ResizeAction rs = new WindowsApplication2.ResizeAction(this.label1,this);
            WindowsApplication2.ResizeAction rs = new WindowsApplication2.ResizeAction(this.button1, this);   
        }

参考:http:
// www.cnblogs.com/DS-CzY/archive/2007/06/30/801377.aspx
 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值