【问题标题】:WinForms disable double clicks and accept all mouse clicks?WinForms禁用双击并接受所有鼠标点击?
【发布时间】:2012-01-23 14:21:31
【问题描述】:

您如何获得所有点击以完成活动?我注意到如果您单击太快,它会认为您正在双击并且不会将点击发送到事件处理程序。有没有办法获得所有点击?

【问题讨论】:

  • 改用 mousedown 事件。
  • @RussellTroywest 我认为MouseClick 事件会更好。因为提高秩序。
  • @Michael:根据 MSDN,“根据用户操作系统的鼠标设置,在足够近的时间内发生的两次单击将生成一个 MouseDoubleClick 事件,而不是第二个 MouseClick 事件。” - 这是 High 所看到的。
  • 是的,有一些方法可以关闭双击事件,但您需要记录您正在使用的特定控件。

标签: c# winforms double-click


【解决方案1】:

不确定为什么这个问题会得到赏金,接受的答案应该已经非常接近解决方案了。除了您应该使用 MouseUp 而不是 MouseDown 之外,您的用户通常希望单击操作在他释放按钮时生效。它提供了退出“哎呀,不是要单击它,移动鼠标使其被忽略”选项。

不过,对于内置的 Winforms 控件,例如 PictureBox,可以使用 Control.SetStyle() 方法进行配置。向您的项目添加一个新类并粘贴如下所示的代码。编译。从工具箱顶部删除新控件:

using System;
using System.Windows.Forms;

class MyPictureBox : PictureBox {
    public MyPictureBox() {
        this.SetStyle(ControlStyles.StandardDoubleClick, false);
    }
}

但请注意,这不适用于包装现有本机 Windows 控件的 .NET 类。像 TextBox、ListBox、TreeView 等。其底层配置是 WNDCLASSEX.style member,CS_DBLCLKS 样式标志。设置该样式标志的代码已嵌入 Windows,无法更改。您需要进行不同类型的手术才能将双击变为单击。您可以通过重写 WndProc() 方法来实现,我将举一个 TextBox 的示例:

using System;
using System.Windows.Forms;

class MyTextBox : TextBox {
    protected override void WndProc(ref Message m) {
        // Change WM_LBUTTONDBLCLK to WM_LBUTTONCLICK
        if (m.Msg == 0x203) m.Msg = 0x201;
        base.WndProc(ref m);
    }
}

如果您想对其他控件进行更改,只需更改类名即可。控制 Winforms 使其以您想要的方式工作永远不需要太多代码,只需 Petzold :)

【讨论】:

    【解决方案2】:

    您想使用控件的 MouseDown 事件而不是 Click 事件。每次鼠标在该控件上“按下”时,都会调用 MouseDown。如果系统认为它是双击,则可能不会调用 Click。而是引发 DoubleClick 事件。

    【讨论】:

      【解决方案3】:

      我认为您想计算所有点击次数。 如果要计算点击次数,请设置一个计数器变量并在点击事件中增加它。 可能对你有帮助....

      【讨论】:

      • 自己做,然后快速点击 10 次。你会得到一个小于 10 的数字。我想要所有 10 次点击。
      猜你喜欢
      • 1970-01-01
      • 2010-12-10
      • 2018-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 2012-03-28
      • 2022-01-12
      相关资源
      最近更新 更多