【问题标题】:Way to differentiate Click from DoubleClick区分 Click 和 DoubleClick 的方法
【发布时间】:2010-08-07 13:23:49
【问题描述】:

我在面板中有一个带有一些对象的 GDI 绘图。

当用户点击一个对象时,这个对象应该被选中,如果双击它,一个新的弹出(属性)窗口应该打开。

现在,我重写了
OnMouseClick => obj.Selected = Not obj.Selected
OnMouseDoubleClick => (New Properties(obj)).ShowDialog()

问题在于,当弹出窗口打开时(由于 DoubleClick),对象被选中(由于 Click)。有没有办法避免(忽略)这个中间点击?

(比方说,在实际项目中我不使用click,甚至MouseDown,但是,问题仍然存在)

【问题讨论】:

    标签: .net winforms events gdi+


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      当您收到点击事件时,您可以(使用计时器或任何其他延迟机制)将选择操作延迟比SystemInformation.DoubleClickTime 指定的稍长的时间。如果在该时间段内发生另一个MouseDown 事件,则它是双击,那么您应该取消排队的选择操作。

      【讨论】:

      • 你认为选择延迟会被用户“观察到”吗?
      • 从其他部分,正如我所指出的,我已经使用了 MouseDown...我应该使用 DoEvents 还是类似的东西来获得第二个 MouseDown?
      • @serhio:我不确定用户是否会注意到,我猜这在一定程度上取决于用户的设置。我个人觉得在双击的情况下不应该选择对象有点奇怪,但是我对有问题的应用程序一无所知。
      • @Frederik:找出具有多个组件形状的复杂形状。当您单击一个组件时,该组件(仅)被选中。当您双击一个组件时,形状属性会显示在一个窗口中。因此,DoubleClick 具有整个形状属性窗口,但没有 DoubleClicked 组件选择。
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-17
        • 1970-01-01
        • 2019-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多