Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 区分单击和双击的方法_.net_Winforms_Events_Gdi+ - Fatal编程技术网

.net 区分单击和双击的方法

.net 区分单击和双击的方法,.net,winforms,events,gdi+,.net,Winforms,Events,Gdi+,我在面板中有一个GDI图形和一些对象 当用户单击一个对象时,应选择该对象,如果双击该对象,应打开一个新的弹出属性窗口 现在,我超越了 OnMouseClick=>obj.Selected=未选择obj.Selected OnMouseDoubleClick=>newpropertiesObj.ShowDialog 问题是,当弹出窗口因双击而打开时,对象因单击而被选中。是否存在避免忽略此中间单击的方法 比如说,在真实的项目中,我不使用click,甚至不使用MouseDown,但是,问题仍然是一样的

我在面板中有一个GDI图形和一些对象

当用户单击一个对象时,应选择该对象,如果双击该对象,应打开一个新的弹出属性窗口

现在,我超越了 OnMouseClick=>obj.Selected=未选择obj.Selected OnMouseDoubleClick=>newpropertiesObj.ShowDialog

问题是,当弹出窗口因双击而打开时,对象因单击而被选中。是否存在避免忽略此中间单击的方法


比如说,在真实的项目中,我不使用click,甚至不使用MouseDown,但是,问题仍然是一样的

当您获得click事件时,您可以使用计时器或任何其他延迟机制将select操作延迟稍长于指定的时间。如果在该时间段内发生另一个MouseDown事件,则是双击,因此您应该取消排队的选择操作。

当您获得单击事件时,您可以使用计时器或任何其他延迟机制将选择操作延迟稍长于指定的时间。如果在该时间段内发生另一个MouseDown事件,则是双击,因此您应该取消排队的选择操作。

将MouseClick事件处理程序保持原样,只需将另一个obj.Selected=Not obj.Selected添加到双击事件处理程序中,怎么样? 这当然会导致一个选择-取消选择序列或双击的其他方式,我不知道用户是否会识别闪烁,但我想这是值得一试的,没有计时器会容易得多

编辑:
如果有任何事件处理程序附加到目标对象的SelectionChanged事件,则此相当实用的解决方案不起作用,因为它将在根本不应触发的位置触发两次。

将鼠标单击事件处理程序保持原样,只需将另一个obj.Selected=Not obj.Selected添加到双击事件处理程序中,怎么样? 这当然会导致一个选择-取消选择序列或双击的其他方式,我不知道用户是否会识别闪烁,但我想这是值得一试的,没有计时器会容易得多

编辑:
如果目标对象的SelectionChanged事件附加了任何事件处理程序,那么这种相当实用的解决方案就不起作用了,因为它会在根本不应该触发的地方触发两次。

如何使用?

如何使用?

您认为用户会观察到选择延迟吗?正如我所指出的,我已经用鼠标下了。。。我应该使用DoEvents或类似的工具来获得第二次鼠标下移吗?@serhio:我不确定用户是否会注意到,我想这取决于用户的设置。我个人觉得在双击的情况下不应该选择对象有点奇怪,但是我对所讨论的应用程序一无所知。@Frederik:找出一个包含多个组件形状的复杂形状。单击组件时,将选中componentonly。双击零部件时,形状特性将显示在窗口中。所以双击的结果是整个形状属性窗口,而不是双击的组件选择。你认为用户会观察到选择延迟吗?正如我所指出的,从其他部分来看,我已经使用MouseDown。。。我应该使用DoEvents或类似的工具来获得第二次鼠标下移吗?@serhio:我不确定用户是否会注意到,我想这取决于用户的设置。我个人觉得在双击的情况下不应该选择对象有点奇怪,但是我对所讨论的应用程序一无所知。@Frederik:找出一个包含多个组件形状的复杂形状。单击组件时,将选中componentonly。双击零部件时,形状特性将显示在窗口中。因此,双击的结果是整个“形状属性”窗口,而不是双击的组件选择。