如何为winforms实现双击右键?

时间:2010-09-07 20:29:43

标签: c# winforms mouseevent

This question似乎指出存在双重右键单击的Windows事件。但是,如何在C#窗体中实现它并不是很清楚。

实现双键右键单击控件(例如按钮)的最佳方法是什么?

(我想我必须使用MouseDown并跟踪点击之间的时间。有更好的方法吗?)

4 个答案:

答案 0 :(得分:5)

覆盖WndProc功能并收听WM_RBUTTONDBLCLK0x0206页面上显示的内容为{{1}}。

该pinvoke页面还有一些C#示例代码,用于执行此操作。

每当您看到有关Windows消息和/或Windows API的内容并希望在C#中使用它时,pinvoke站点就是一个开始寻找的好地方。

答案 1 :(得分:3)

覆盖Control.WndProc,并手动处理WM_RBUTTONDBLCLK消息。

答案 2 :(得分:2)

MouseEventArgs包含属性“Button”,表示单击了按钮。所以你可以简单地检查一下:

    private void MouseDoubleClickEventHandler(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            DoSomthing();
        } else if (e.Button == MouseButtons.Right)
        {
            DoSomethingElse();
        }
    }

答案 3 :(得分:0)

我能够通过继承按钮并覆盖WndProc来实现这一点,因为ho1和Reed建议。这是继承的按钮:

public class RButton : Button
{
    public delegate void MouseDoubleRightClick(object sender, MouseEventArgs e);
    public event MouseDoubleRightClick DoubleRightClick;
    protected override void WndProc(ref Message m)
    {
        const Int32 WM_RBUTTONDBLCLK = 0x0206;
        if (m.Msg == WM_RBUTTONDBLCLK)
            DoubleRightClick(this, null);
        base.WndProc(ref m);
    }
}

我以编程方式向表单添加了按钮,并订阅了新的DoubleRightClick事件。我不确定如何生成适当的MouseEventArgs,但由于这只是一个测试用例,因此并不重要。