加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 04:13:53 所属栏目:百科 来源:网络整理
导读:您如何获得所有点击以参加活动?我注意到如果你点击太快它认为你是双击并且没有将点击发送到事件处理程序.有没有办法获得所有点击? 解决方法 不确定为什么这个问题得到了赏金,接受的答案应该已经非常接近解决方案了.除了您应该使用MouseUp而不是MouseDown之
您如何获得所有点击以参加活动?我注意到如果你点击太快它认为你是双击并且没有将点击发送到事件处理程序.有没有办法获得所有点击?

解决方法

不确定为什么这个问题得到了赏金,接受的答案应该已经非常接近解决方案了.除了您应该使用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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读