我如何在.NET单选按钮DoubleClick事件?(How do I get a DoubleCl

2019-07-29 11:14发布

我希望能够从一个标准的WinForms单选按钮赶上DoubleClick或MouseDoubleClick事件,但他们似乎被隐藏,而不是工作。 目前,我有这样的代码:

public class RadioButtonWithDoubleClick : RadioButton
{
    public RadioButtonWithDoubleClick()
        : base()
    {
        this.SetStyle( ControlStyles.StandardClick | ControlStyles.StandardDoubleClick, true );
    }

    [EditorBrowsable( EditorBrowsableState.Always ), Browsable( true )]
    public new event MouseEventHandler MouseDoubleClick;
    protected override void OnMouseDoubleClick( MouseEventArgs e )
    {
        MouseEventHandler temp = MouseDoubleClick;
        if( temp != null ) {
            temp( this, e );
        }
    }
}

有没有更简单和更清洁的方式做到这一点?

编辑:关于背景,我同意Raymond Chen的帖子在这里 ,要双击一个单选按钮(如果这些都是该对话框上的唯一控制)的能力,使对话只是一点点更容易使用,谁知道这件事的人。

在Vista中使用任务对话框(请参阅此Microsoft指南页面或本页面MSDN特别是约的任务对话框API )将是显而易见的解决方案,但我们没有的,奢侈。

Answer 1:

根据原来的建议,我做了一个解决方案,而无需使用反射子类radiobuton:

MethodInfo m = typeof(RadioButton).GetMethod("SetStyle", BindingFlags.Instance | BindingFlags.NonPublic);
if (m != null)
{
    m.Invoke(radioButton1, new object[] { ControlStyles.StandardClick | ControlStyles.StandardDoubleClick, true });
}
radioButton1.MouseDoubleClick += radioButton1_MouseDoubleClick;

现在的单选按钮的双击事件。 BTW:内特使用e.Clicks的建议是行不通的。 在我的测试e.Clicks总是1不管多么快或经常我点击了单选按钮。



Answer 2:

你可以这样做:

myRadioButton.MouseClick += new MouseEventHandler(myRadioButton_MouseClick);

void myRadioButton_MouseClick(object sender, MouseEventArgs e)
{
    if (e.Clicks == 2)
    {
         // Do something
    }
}

您可能会或可能不会还想要检查e.Button == MouseButtons.Left



Answer 3:

基于@MSW答案,我做了这个扩展类:

static class RadioButtonEx
{
    public static void AllowDoubleClick(this RadioButton rb, MouseEventHandler MouseDoubleClick)
    {
        //
        // Allow double clicking of radios
        System.Reflection.MethodInfo m = typeof(RadioButton).GetMethod("SetStyle", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
        if (m != null)
            m.Invoke(rb, new object[] { ControlStyles.StandardClick | ControlStyles.StandardDoubleClick, true });

        rb.MouseDoubleClick += MouseDoubleClick;
    }
}

然后将其超级容易设置和再利用:

radioButton.AllowDoubleClick((a, b) => myDoubleClickAction());


Answer 4:

对不起,没有信誉对此置评。 你想有什么作用双击用户执行? 我想用双击可能会产生混淆,因为它是从一个用户有一个单选按钮一般心智模式不同(IE单一的点击,选择一组一个选项)



文章来源: How do I get a DoubleClick event in a .NET radio button?