WinForms禁止双击并接受所有的鼠标点击

本文关键字:鼠标 禁止 双击 WinForms | 更新日期: 2023-09-27 18:18:21

如何让所有点击都通过事件?我注意到,如果你点击太快,它认为你双击,不发送点击到事件处理程序。有没有办法获得所有的点击量?

WinForms禁止双击并接受所有的鼠标点击

不太确定为什么这个问题会得到这么多奖励,但公认的答案应该已经很接近于一个解决方案了。除了应该使用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。样式成员,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:)

您希望使用控件的MouseDown事件而不是Click事件。每次鼠标"按"在该控件上时都会调用MouseDown。如果系统认为点击是双击,点击可能不会被调用。而会引发一个DoubleClick事件。

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