Вопрос по .net – Как получить событие DoubleClick в радиокнопке .NET?

9

Я хотел бы иметь возможность перехватывать события DoubleClick или MouseDoubleClick с помощью стандартной кнопки-переключателя winforms, но они, похоже, скрыты и не работают. На данный момент у меня есть такой код:

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 );
        }
    }
}

Есть ли более простой и чистый способ сделать это?

Изменить: для справки, я согласен с постом Раймонда ЧенаВот что возможность двойного щелчка на переключателе (если этоonly элементы управления в диалоговом окне) делает диалоговое окно немного проще для людей, которые знают об этом.

В Vista, используя диалоги задач (см.эта страница руководства Microsoft или жеэта страница MSDN специально об API диалога задач) было бы очевидным решением, но мы не можем позволить себе такую роскошь.

Ваш Ответ

4   ответа
3

myRadioButton.MouseClick += new MouseEventHandler(myRadioButton_MouseClick);

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

Error: User Rate Limit Exceeded Ant
Error: User Rate Limit Exceeded
0

Error: User Rate Limit Exceeded Ant
Error: User Rate Limit Exceeded Ant
11

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;

1

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());

Похожие вопросы