C#窗体控件拖动
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace 窗体控件移动 { public partial class Form1 : Form { private bool button_mousedown;//确认鼠标左键+alt是否按下 private Point original_point;//记录鼠标按下时原始位置 private Point control_original_point;//记录控件的原始位置 public Form1() { InitializeComponent(); } //释放鼠标时 private void button1_MouseUp(object sender, MouseEventArgs e) { this.button_mousedown = false;//释放 } //按下鼠标移动鼠标时 private void button1_MouseMove(object sender, MouseEventArgs e)//鼠标按下并移动时 { if (button_mousedown == true)//确认鼠标左键+ctrl已按下时才发生 { Point offset = new Point(Control.MousePosition.X - this.original_point.X, Control.MousePosition.Y - this.original_point.Y);//计算偏移量 this.custombutton.Location = new Point(this.control_original_point.X + offset.X, this.control_original_point.Y + offset.Y);//改变控件的位置 } } //按下鼠标左键时 private void button1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left)//确认鼠标按下是不是左键 { if (ModifierKeys == Keys.Control)//ctrl键是否按下 { this.original_point = Control.MousePosition;//获取鼠标在屏幕上的位置 this.control_original_point = this.custombutton.Location;//控件初始位置 this.button_mousedown = true;//确认鼠标左键+ctrl已按下 } } } //控件单击事件 private void button1_Click(object sender, EventArgs e) { if (this.button_mousedown == false)//没有拖拽时才引发click事件 { OpenFileDialog ofd = new OpenFileDialog(); if (ofd.ShowDialog() == DialogResult.OK) { System.Diagnostics.Process.Start("explorer.exe", ofd.FileName); } } } //加载窗口时注册相关事件 private void Form1_Load(object sender, EventArgs e) { this.custombutton.MouseDown += button1_MouseDown; this.custombutton.MouseMove += button1_MouseMove; this.custombutton.MouseUp += button1_MouseUp; } } }
用ctrl键+鼠标左击去进行拖动窗体控件;
值得注意的是一次mousedown+一次mouseup事件会引发一次click事件,这个要另外设置一个变量(就如上面的button_mousedown )去记录,在没有拖动控件的意愿时才执行click事件
C#窗体控件拖动的更多相关文章
- [转载]WPF控件拖动
这篇博文总结下WPF中的拖动,文章内容主要包括: 1.拖动窗口 2.拖动控件 Using Visual Studio 2.1thumb控件 2.2Drag.Drop(不连续,没有中间动画) 2.3拖动 ...
- C# winform 跨线程更改窗体控件的属性
当winform程序中新开一个线程,是无法改变主线程中窗体控件的属性的,否则运行时会报错. 若想在其他线程中控制主线程中的窗体控件,则必须利用BeginInvoke方法. 例如:添加一个名为textb ...
- winform窗体控件(全)
回顾跟补充下除了昨天那常用6个其他的winform窗体控件作用 1:Button:按钮 (1)AutoSize:如果是True的情况下,内容将会撑开:False的话会另起一行 (2)Enabled: ...
- (转)sl简单自定义win窗体控件
sl简单自定义win窗体控件 相信大家接触过不少win窗体控件ChildWin子窗口就的sl自带的一个 而且网上也有很多类似的控件,而今天我和大家分享下自己制作个win窗体控件,希望对初学 ...
- 如何:对 Windows 窗体控件进行线程安全调用
http://msdn.microsoft.com/zh-cn/library/ms171728(VS.90).aspx http://msdn.microsoft.com/zh-cn/library ...
- C# 静态函数调用窗体控件
回调函数方法是静态函数,需要调用窗体控件,赋值或取值. 定义 public static Form1 mainFrm; mainFrm = this; public partial class F ...
- [原创]C#按比例缩放窗体控件及字体
按照比例缩放窗体控件及字体,如需等比例缩放,只需将x,y的比例设置成相同即可. 为了减小误差,建议使用原始尺寸来计算比例. private float X, Y; private bool b = f ...
- 用于列出选项的Windows窗体控件
可以提供选项列表的控件有ListBox.ComboBox.CheckedListBox,如何正确的使用和选择这些控件,下面对此进行讨论.首先对这三种控件的功能分别进行说明: ListBox ListB ...
- ASP.NET中 WebForm 窗体控件使用及总结【转】
原文链接:http://www.cnblogs.com/ylbtech/archive/2013/03/06/2944675.html ASP.NET中 WebForm 窗体控件使用及总结. 1.A, ...
随机推荐
- arcgis10.0 切片并发布服务及验证
1.切片参考网址:https://jingyan.baidu.com/article/fa4125accc6bef28ac7092d7.html 2.通过下面代码验证 参考网址https://www ...
- 嵌入式驱动开发之---Linux ALSA音频驱动(一)
本文的部分内容参考来自DroidPhone的博客(http://blog.csdn.net/droidphone/article/details/6271122),关于ALSA写得很不错的文章,只是少 ...
- Linux的经常使用命令(1) - 指定执行级别
命令:init [0123456] 执行级别 0:关机 1:单用户 2:多用户状态没有网络服务 3:多用户状态有网络服务 4:系统未使用保留给用户 5:图形界面 6:系统重新启动 经常使用执行级别是3 ...
- smarty静态缓存
缓存能让程序访问起来更加快速,调数据库的数量变少,不能实时的跟数据库同步, 一般缓存文件都放在smarty文件下cach文件夹中: 建立缓存的PHP和HTML文件: 先编辑PHP文件来查询显示数据库当 ...
- 五个知识体系之-SQL学习-第一天
1. 创建数据库 CREATE DATABASE test1; 2. 删除数据库 DROP DATABASE test1; 3. 创建表 CREATE TABLE tabname (userid BI ...
- ICMP控制报文协议
1.引言 ICMP经常被认为是IP层的一个组成部分.它传递差错以及其他需要注意的信息.ICMP报文通常被IP层或更高层 协议(TCP或UDP)使用.一些ICMP报文把差错报文返回给用户进程.ICMP报 ...
- Notepad工具使用小技巧
工欲善其事必先利其器 Notepad++是个很不错的文本编辑工具,掌握它的使用技巧可以提高我们工作的效率.见如下: 比较常用的罗列如下:(如果有更好的建议可以留言哈) 1: 添加书签 CTRL+F2 ...
- ios导航栏问题
http://m.blog.csdn.net/article/details?id=47395605
- OEM7GRUB 0.4.4 2009-11-18
windows7电脑重装系统后, 启动不了, 提示这个错误: Error: OEM7GRUB 0.4.4 2009-11-18...... 解决办法: 用PE系统进入后, 运行DiskGenius软件 ...
- 远程服务器上的weblogic项目管理(三)常用指令及常见错误
weblogic的管理流程已在前两节整理完毕,接下来汇总一下linux环境下的weblogic管理常用指令及常见错误: 常用指令: ./startWebLogic.sh 启动weblogic ./st ...