zoukankan      html  css  js  c++  java
  • C# 运行时通过鼠标拖动改变控件的大小

    来源:http://blog.csdn.net/yanleigis/article/details/1819447 

    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
  • 相关阅读:
    Java -- JDBC 批处理
    Java -- JDBC mysql读写大数据,文本 和 二进制文件
    Python之操作符优先级
    闲聊之Python的数据类型
    UPX和WinUpack压缩壳的使用和脱法
    改进我们的小游戏
    Python while循环语法
    Python条件分支语法
    python条件分支
    小插曲之变量和字符串
  • 原文地址:https://www.cnblogs.com/foreverstars/p/3205527.html
Copyright © 2011-2022 走看看