微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/csharp/92289.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐