C# · 12月 25, 2021

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

您如何获得所有点击以参加活动?我注意到如果你点击太快它认为你是双击并且没有将点击发送到事件处理程序.有没有办法获得所有点击?解决方法 不确定为什么这个问题得到了赏金,接受的答案应该已经非常接近解决方案了.除了您应该使用MouseUp而不是MouseDown之外,您的用户通常希望点击操作在他释放按钮时生效.这提供了退出“oops,并不意味着点击它,移动鼠标,因此它被忽略”选项.

然而,对于内置的Winforms控件,如Picture@R_882_2419@,可以使用Control.SetStyle()方法进行配置.在项目中添加一个新类并粘贴下面显示的代码.编译.从工具箱顶部删除新控件:

using System;using System.Windows.Forms;class MyPicture@R_882_2419@ : Picture@R_882_2419@ { public MyPicture@R_882_2419@() { this.SetStyle(ControlStyles.StandardDoubleClick,false); }}

但请注意,这不适用于包装现有本机Windows控件的.NET类.像Text@R_882_2419@,List@R_882_2419@,TreeView等.它的基础配置是WNDCLASSEX.style member,CS_DBLCLKS样式标志.设置该样式标志的代码将烘焙到Windows中,无法更改.您需要进行不同类型的手术才能将双击返回到单击.您可以通过重写WndProc()方法来实现,我将为Text@R_882_2419@提供一个示例:

using System;using System.Windows.Forms;class MyText@R_882_2419@ : Text@R_882_2419@ { 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