WinForms禁用双击并接受所有鼠标点击?

您如何获得所有点击以参加活动? 我注意到如果你点击太快它会认为你是双击并且没有将点击发送到事件处理程序。 有没有办法获得所有点击?

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

然而,对于内置的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成员 ,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); } } 

如果要对其他控件执行此操作,只需更改类名。 Commandeering Winforms让它按照您想要的方式工作从不需要太多代码,只需Petzold 🙂

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

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