This question似乎指出存在双重右键单击的Windows事件。但是,如何在C#窗体中实现它并不是很清楚。
实现双键右键单击控件(例如按钮)的最佳方法是什么?
(我想我必须使用MouseDown
并跟踪点击之间的时间。有更好的方法吗?)
答案 0 :(得分:5)
覆盖WndProc
功能并收听WM_RBUTTONDBLCLK
,0x0206
页面上显示的内容为{{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
,但由于这只是一个测试用例,因此并不重要。