zoukankan      html  css  js  c++  java
  • 移动控件

          在练习中,感觉项目中如用上移动控件的方法会更好,于是自己写了一个:只是功能有限,需再完善。

      1using System;
      2using System.Collections.Generic;
      3using System.ComponentModel;
      4using System.Data;
      5using System.Drawing;
      6using System.Text;
      7using System.Windows.Forms;
      8
      9namespace scws_Repl
     10{
     11    public partial class Form1 : Form
     12    {
     13        public Form1()
     14        {
     15            InitializeComponent();
     16        }

     17
     18        设置成可拖动窗体 与mousemove事件冲突
     38
     39
     40        private System.Drawing.Point mousePoint;
     41        private System.Windows.Forms.Button mybutton = null;
     42
     43        private void button1_Click(object sender, EventArgs e)
     44        {
     45            mybutton = new Button();           
     46            this.Controls.Add(mybutton);
     47            mybutton.Text = "newbutton";
     48            mybutton.MouseDown += new MouseEventHandler(mybutton_MouseDown);
     49            mybutton.MouseMove += new MouseEventHandler(mybutton_MouseMove);
     50            mybutton.MouseUp += new MouseEventHandler(mybutton_MouseUp);
     51        }

     52        
     53       
     54        private void Form1_MouseMove(object sender, MouseEventArgs e)
     55        {
     56            this.mousePoint.X = e.X;
     57            this.mousePoint.Y = e.Y;
     58            this.linkLabel1.Text = "相对窗口 X:" + mousePoint.X.ToString();
     59            this.linkLabel2.Text = "相对窗口 Y:" + mousePoint.Y.ToString();
     60            this.Text = "相对屏幕 X:" + Cursor.Position.X.ToString() + "          Y:" + Cursor.Position.Y.ToString();
     61        }

     62
     63        /// <summary>
     64        /// 记录鼠标位置
     65        /// </summary>

     66        private Point mousePos; 
     67        private int diffx, diffy;
     68        /// <summary>
     69        /// 记录是否可以移动 
     70        /// </summary>

     71        private bool beginmove = false;
     72
     73        private void mybutton_MouseMove(object sender, MouseEventArgs e)
     74        {
     75            if (beginmove)
     76            {
     77                Button b1 = (Button)sender;
     78                //
     79                diffx = mousePos.X - e.X;
     80                diffy = mousePos.Y - e.Y;
     81                b1.Location = new Point(b1.Location.X - diffx, b1.Location.Y - diffy);
     82               
     83            }

     84        }

     85
     86        private void mybutton_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
     87        {
     88            beginmove = true;//开始移动     
     89            mousePos = new Point(e.X, e.Y);
     90        }

     91
     92        private void mybutton_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
     93        {
     94            if (e.Button == MouseButtons.Left)
     95            {
     96                beginmove = false;
     97                Button b1 = (Button)sender;
     98                diffx = b1.Location.X - mousePos.X + e.X;
     99                diffy = b1.Location.Y - mousePos.Y + e.Y;
    100                this.linkLabel3.Text = b1.Text;
    101                b1.BackColor = Color.Red;
    102                this.linkLabel4.Text = b1.BackColor.ToString();
    103                this.linkLabel5.Text = diffx.ToString();
    104                this.linkLabel6.Text = diffy.ToString();
    105            }

    106        }

    107    }
           
    108}

    关于移动和拖动及缩放大小的代码如下:

      1using System;
      2using System.Collections.Generic;
      3using System.ComponentModel;
      4using System.Data;
      5using System.Drawing;
      6using System.Text;
      7using System.Windows.Forms;
      8
      9namespace scws_Repl
     10{
     11    public partial class Form2 : Form
     12    {
     13        public Form2()
     14        {
     15            InitializeComponent();
     16        }

     17
     18        private enum EnumMousePointPosition
     19        {
     20            MouseSizeNone = 0,       //'无
     21            MouseSizeRight = 1,      //'拉伸右边框
     22            MouseSizeLeft = 2,       //'拉伸左边框
     23            MouseSizeBottom = 3,     //'拉伸下边框
     24            MouseSizeTop = 4,        //'拉伸上边框
     25            MouseSizeTopLeft = 5,    //'拉伸左上角
     26            MouseSizeTopRight = 6,   //'拉伸右上角
     27            MouseSizeBottomLeft = 7//'拉伸左下角
     28            MouseSizeBottomRight = 8,//'拉伸右下角
     29            MouseDrag = 9            // '鼠标拖动
     30        }

     31
     32        //定义几个变量
     33        const int Band = 5;
     34        const int MinWidth = 10;
     35        const int MinHeight = 10;
     36        private EnumMousePointPosition m_MousePointPosition;
     37        private Point p, p1;
     38
     39        //定义自己的MyMouseDown事件
     40        private void MyMouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
     41        {
     42            p.X = e.X;
     43            p.Y = e.Y; p1.X = e.X;
     44            p1.Y = e.Y;
     45        }

     46
     47        //定义自己的MyMouseLeave事件
     48        private void MyMouseLeave(object sender, System.EventArgs e)
     49        {
     50            m_MousePointPosition = EnumMousePointPosition.MouseSizeNone;
     51            this.Cursor = Cursors.Arrow;
     52        }

     53
     54
     55        //设计一个函数,确定光标在控件不同位置的样式
     56        private EnumMousePointPosition MousePointPosition(Size size, System.Windows.Forms.MouseEventArgs e)
     57        {
     58            if ((e.X >= -1 * Band) | (e.X <= size.Width) | (e.Y >= -1 * Band) | (e.Y <= size.Height))
     59            {
     60                if (e.X < Band)
     61                {
     62                    if (e.Y < Band) return EnumMousePointPosition.MouseSizeTopLeft; }
     63                    else
     64                    {
     65                        if (e.Y > -1 * Band + size.Height)
     66                        return EnumMousePointPosition.MouseSizeBottomLeft; }
     67                        else
     68                        return EnumMousePointPosition.MouseSizeLeft; }
     69                    }

     70                }

     71                else
     72                {
     73                    if (e.X > -1 * Band + size.Width)
     74                    {
     75                        if (e.Y < Band)
     76                        return EnumMousePointPosition.MouseSizeTopRight; }
     77                        else
     78                        {
     79                            if (e.Y > -1 * Band + size.Height)
     80                            return EnumMousePointPosition.MouseSizeBottomRight; }
     81                            else
     82                            return EnumMousePointPosition.MouseSizeRight; }
     83                        }

     84                    }

     85                    else
     86                    {
     87                        if (e.Y < Band)
     88                        return EnumMousePointPosition.MouseSizeTop; }
     89                        else
     90                        {
     91                            if (e.Y > -1 * Band + size.Height)
     92                            return EnumMousePointPosition.MouseSizeBottom; }
     93                            else
     94                            return EnumMousePointPosition.MouseDrag; }
     95                        }

     96                    }

     97                }

     98            }

     99            else
    100            return EnumMousePointPosition.MouseSizeNone; }
    101        }

    102
    103        //定义自己的MyMouseMove事件,在这个事件里,会使用上面设计的函数
    104        private void MyMouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    105        {
    106            Control lCtrl = (sender as Control);
    107
    108            if (e.Button == MouseButtons.Left)
    109            {
    110                switch (m_MousePointPosition)
    111                {
    112                    case EnumMousePointPosition.MouseDrag:
    113                        lCtrl.Left = lCtrl.Left + e.X - p.X;
    114                        lCtrl.Top = lCtrl.Top + e.Y - p.Y;
    115                        break;
    116                    case EnumMousePointPosition.MouseSizeBottom:
    117                        lCtrl.Height = lCtrl.Height + e.Y - p1.Y;
    118                        p1.X = e.X;
    119                        p1.Y = e.Y; //'记录光标拖动的当前点
    120                        break;
    121                    case EnumMousePointPosition.MouseSizeBottomRight:
    122                        lCtrl.Width = lCtrl.Width + e.X - p1.X;
    123                        lCtrl.Height = lCtrl.Height + e.Y - p1.Y;
    124                        p1.X = e.X;
    125                        p1.Y = e.Y; //'记录光标拖动的当前点
    126                        break;
    127                    case EnumMousePointPosition.MouseSizeRight:
    128                        lCtrl.Width = lCtrl.Width + e.X - p1.X;
    129                        //      lCtrl.Height = lCtrl.Height + e.Y - p1.Y;
    130                        p1.X = e.X;
    131                        p1.Y = e.Y; //'记录光标拖动的当前点
    132                        break;
    133                    case EnumMousePointPosition.MouseSizeTop:
    134                        lCtrl.Top = lCtrl.Top + (e.Y - p.Y);
    135                        lCtrl.Height = lCtrl.Height - (e.Y - p.Y);
    136                        break;
    137                    case EnumMousePointPosition.MouseSizeLeft:
    138                        lCtrl.Left = lCtrl.Left + e.X - p.X;
    139                        lCtrl.Width = lCtrl.Width - (e.X - p.X);
    140                        break;
    141                    case EnumMousePointPosition.MouseSizeBottomLeft:
    142                        lCtrl.Left = lCtrl.Left + e.X - p.X;
    143                        lCtrl.Width = lCtrl.Width - (e.X - p.X);
    144                        lCtrl.Height = lCtrl.Height + e.Y - p1.Y;
    145                        p1.X = e.X;
    146                        p1.Y = e.Y; //'记录光标拖动的当前点
    147                        break;
    148                    case EnumMousePointPosition.MouseSizeTopRight:
    149                        lCtrl.Top = lCtrl.Top + (e.Y - p.Y);
    150                        lCtrl.Width = lCtrl.Width + (e.X - p1.X);
    151                        lCtrl.Height = lCtrl.Height - (e.Y - p.Y);
    152                        p1.X = e.X;
    153                        p1.Y = e.Y; //'记录光标拖动的当前点
    154                        break;
    155                    case EnumMousePointPosition.MouseSizeTopLeft:
    156                        lCtrl.Left = lCtrl.Left + e.X - p.X;
    157                        lCtrl.Top = lCtrl.Top + (e.Y - p.Y);
    158                        lCtrl.Width = lCtrl.Width - (e.X - p.X);
    159                        lCtrl.Height = lCtrl.Height - (e.Y - p.Y);
    160                        break;
    161                    default:
    162                        break;
    163                }

    164                if (lCtrl.Width < MinWidth) lCtrl.Width = MinWidth;
    165                if (lCtrl.Height < MinHeight) lCtrl.Height = MinHeight;
    166
    167            }

    168            else
    169            {
    170                m_MousePointPosition = MousePointPosition(lCtrl.Size, e);  //'判断光标的位置状态
    171                switch (m_MousePointPosition)  //'改变光标
    172                {
    173                    case EnumMousePointPosition.MouseSizeNone:
    174                        this.Cursor = Cursors.Arrow;       //'箭头
    175                        break;
    176                    case EnumMousePointPosition.MouseDrag:
    177                        this.Cursor = Cursors.SizeAll;     //'四方向
    178                        break;
    179                    case EnumMousePointPosition.MouseSizeBottom:
    180                        this.Cursor = Cursors.SizeNS;      //'南北
    181                        break;
    182                    case EnumMousePointPosition.MouseSizeTop:
    183                        this.Cursor = Cursors.SizeNS;      //'南北
    184                        break;
    185                    case EnumMousePointPosition.MouseSizeLeft:
    186                        this.Cursor = Cursors.SizeWE;      //'东西
    187                        break;
    188                    case EnumMousePointPosition.MouseSizeRight:
    189                        this.Cursor = Cursors.SizeWE;      //'东西
    190                        break;
    191                    case EnumMousePointPosition.MouseSizeBottomLeft:
    192                        this.Cursor = Cursors.SizeNESW;    //'东北到南西
    193                        break;
    194                    case EnumMousePointPosition.MouseSizeBottomRight:
    195                        this.Cursor = Cursors.SizeNWSE;    //'东南到西北
    196                        break;
    197                    case EnumMousePointPosition.MouseSizeTopLeft:
    198                        this.Cursor = Cursors.SizeNWSE;    //'东南到西北
    199                        break;
    200                    case EnumMousePointPosition.MouseSizeTopRight:
    201                        this.Cursor = Cursors.SizeNESW;    //'东北到南西
    202                        break;
    203                    default:
    204                        break;
    205                }

    206            }

    207        }

    208
    209
    210        //制作一个初始化过程,将界面panel1上的所有控件都绑定MyMouseDown、MyMouseLeave、MyMouseMove事件,记得在Form初始化或者Form_Load时先执行它。
    211        private void initProperty()
    212        {
    213            for (int i = 0; i < this.panel1.Controls.Count; i++)
    214            {
    215                this.panel1.Controls[i].MouseDown += new System.Windows.Forms.MouseEventHandler(MyMouseDown);
    216                this.panel1.Controls[i].MouseLeave += new System.EventHandler(MyMouseLeave);
    217                this.panel1.Controls[i].MouseMove += new System.Windows.Forms.MouseEventHandler(MyMouseMove);
    218            }

    219        }

    220
    221        private void Form2_Load(object sender, EventArgs e)
    222        {
    223            initProperty();
    224        }

    225    }

    226}
  • 相关阅读:
    Oracle VM VirtualBox 虚拟机中桥接模式一直不能用 ,需要安装 VBoxNetLwf.inf
    Windows7窗口跑到屏幕外面
    手动操作群晖蜂鸣器指示灯方法
    DHT11温湿度传感器接入HomeBridge
    DIY树莓派Homebridge智能台灯
    群晖NAS局域网无法跑满千兆排查
    虚拟机性能监控与故障处理工具------JDK的命令行工具
    垃圾收集器与内存分配策略-内存分配与回收策略
    Minor GC 与Full GC有什么不一样
    java的关键字与保留字
  • 原文地址:https://www.cnblogs.com/winnxm/p/1207917.html
Copyright © 2011-2022 走看看