您的位置:首页 > 其它

解决WinForm 程序中由于拖拽导致MouseUp事件无法触发的问题

2010-03-13 09:26 1751 查看
在工作过程中遇到如下问题:

在一个界面上要求控件(LinkLabel)能够拖拽,单击控件要能够跳出窗口。于是按照常规的方法,MouseDown中加入DoDragUp,再加入DragEnter和DragDrop,完事。

发现无法跳出窗口了(跳出窗口写在MouseUp事件中)。

琢磨了很久,也上网找了许多资料,包括MSDN上面的,最后重写控件解决,现总结一下:

一开始想到用双击来代替单击,无奈双击包括单击,就想能不能把他们分开呢?

MSDN上的方法有两个,一个是回滚单击操作,一个是在MouseDown 事件中区分单击和双击

链接:http://msdn.microsoft.com/zh-cn/library/ms171543.aspx,大家可以先参考一下

先说第一种:

关键的在这里:

代码

1 protected override void OnMouseDown(MouseEventArgs e)
2 {
3 if (e.Button == MouseButtons.Left)
4 {
5 this.IfDoDrag = true;//标志位,需自定义
6 }
7 base.OnMouseDown(e);
8 }
9 protected override void OnMouseMove(MouseEventArgs e)
10 {
11 if (this.IfDoDrag)//还可以加入其它的判断条件,比如拖出多少范围后才触发拖动
12 {
13 this.DoDragDrop(data, DragDropEffects.Move);
14 this.IfDoDrag = false;
15 }
16 base.OnMouseMove(e);
17 }
18 protected override void OnMouseUp(MouseEventArgs e)
19 {
20 this.doDragDrop = false;
24 base.OnMouseUp(e);
25 }

以上是我重写的LinkLabel控件,也可以依样画葫芦重写其它的控件

然后在容器中添加该控件,就像使用普通的LinkLabel一样,添加MouseDown,MouseUp事件,其中MouseDown中需要将需要拖拽的数据data传入控件,而MouseUp中就可以执行先前需要单击执行的操作。

这样,问题就解决了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐