c# – 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 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);
    }
}

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

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...