WinForm无边框窗体实现双击缩放及拖动
来源:互联网 发布:东奥会计怎么样 知乎 编辑:程序博客网 时间:2024/05/20 10:51
有时候要实现无边框的winform窗体,由于没有边框了,所以缩放功能没有了,同时也不能拖动窗体。在实际应用中,我们经常会有一个窗体的头部来显示Title,需要在这个头部左键双击实现缩放以及左键按住实现拖动。缩放时,应该首先设置窗体的默认长、宽及与屏幕的左边距和上边距。拖动时,根据鼠标位置移动窗体位置。两个操作都是根据MouseDown事件来操作的,所以要理清思路。双击缩放,在第一次点击时,设置过期时间,若在过期时间内在此点击,则改变窗体大小。拖动时,需要MouseDown、MouseUp、MouseMove同时配合,在MouseDown是第一次触发时,记录当前鼠标位置,并设置属性左键按下标记leftFlag为true。若leftFlag为true移动鼠标,则在MouseMove事件下开始移动窗体,MouseUp事件中改变左键按下标记leftFlag为false。过期时间:
Timer timer = new Timer();
点击次数:
clickTime=0;
左键按下标志:
leftFlag=false;
窗体初始化时设置过期时间:
timer.Interval = 300; timer.Tick += (s, e1) => { timer.Stop();clickTime = 0; };
MouseMove事件:
private void panel1_MouseMove(object sender, MouseEventArgs e) { if(leftFlag) { PointmouseSet = Control.MousePosition; mouseSet.Offset(mPoint.X,mPoint.Y); //设置移动后的位置 Location = mouseSet; } }
MouseUp事件:
private void panel1_MouseUp(object sender, MouseEventArgs e) { leftFlag = false; }
MouseDown事件:
private void panel1_MouseDown(object sender, MouseEventArgs e) { clickTime++; timer.Start(); if (clickTime % 2 == 0) { this.WindowState = this.WindowState == FormWindowState.Maximized ?FormWindowState.Normal : FormWindowState.Maximized; clickTime = 0; } else { if(!leftFlag) { mPoint.X = -e.X; mPoint.Y = -e.Y; leftFlag = true; } else { leftFlag = false; } } }
0 0
- WinForm无边框窗体实现双击缩放及拖动
- winForm实现拖动无边框窗体
- 实现无边框窗体的拖动及窗体大小变化
- C# WinForm 拖动无边框窗体
- C# WinForm 拖动无边框窗体
- WinForm 无边框窗体 拖动工作区移动窗体
- WinForm 无边框窗体 拖动工作区移动窗体
- QT实现无边框窗体的最小化,最大化/还原,关闭,拖动和双击最大化等功能
- WinForm 无边框窗口 拖动实现
- C# 实现拖动无边框窗体
- C#实现无边框窗体拖动
- C#实现无边框窗体拖动
- C#中实现无边框窗体拖动
- 无边框窗体拖动
- 无边框窗体拖动
- Qt控制无边框窗体的拖动与缩放
- Qt控制无边框窗体的拖动与缩放
- C# WinForm 拖动无边框窗体 改变无边框窗体尺寸
- 常用的推荐算法
- JAVA中数组和List的相互转换
- Centos 查看系统信息
- symfony2 用phpunit进行单元测试
- javascript中的模板引擎template
- WinForm无边框窗体实现双击缩放及拖动
- Ext.GridPanel 用法总结(一)—— Grid基本用法
- ios8通知中心与恢复按钮 Notification
- 第三方插件
- Java:Java程序员进阶
- iOS微信支付开发
- Android使用AsynchronousHttpClient
- cle IMP-00015: 由于对象已存在, 下列语句失败
- The http_proxy Environment Variable