どのように私は、.NETラジオボタンでDoubleClickイベントを得るのですか?
-
21-08-2019 - |
質問
私は、標準の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 );
}
}
}
それを行うためのシンプルかつクリーンな方法はありますか?
編集:背景については、私はレイモンド陳氏のポストに同意する<のhref = "http://blogs.msdn.com/oldnewthing/archive/2005/08/04/447654.aspx" のrel = "noreferrer" タイトル= 「旧新シング:ダブルクリックするラジオボタン」>ここにあるラジオボタンをダブルクリックする能力は(それらは、ダイアログ上のののみのコントロールされている場合)だけでダイアログを作ることをそれについて知っている人にとって使いほんの少しより簡単ます。
Vistaでは、タスクダイアログ(参照これを使用してマイクロソフトのガイドラインページまたは<のhref = "http://msdn.microsoft.com/en-us/library/bb787471(VS.85).aspx" のrel = "noreferrer" タイトル= "MSDN:タスクダイアログ「>特にタスクダイアログAPIについてこのMSDNページ)は明白な解決策だろうが、我々はその豪華さを持っていません。
解決
私はリフレクションを使用して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;
これでラジオボタンのためのダブルクリックイベントが発生します。 ところで:ネイト使用e.Clicksの提案は動作しません。私のテストのe.Clicksでは、私はラジオボタンをクリックする頻度速いかに関係なく、常に1ませんでした。
他のヒント
あなたはこのような何かを行うことができます:
myRadioButton.MouseClick += new MouseEventHandler(myRadioButton_MouseClick);
void myRadioButton_MouseClick(object sender, MouseEventArgs e)
{
if (e.Clicks == 2)
{
// Do something
}
}
あなたは、あるいはまたe.Button == MouseButtons.Left
ことを確認したくない場合があります@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());
申し訳ありませんが、これについてコメントするの評判を持っていません。あなたが持ってしようとしているどのようなアクションユーザーに対して実行をダブルクリックしますか?私は(、セットから一つの選択肢を選択IEシングルクリック)、それは、ユーザがラジオボタンであり、一般的なメンタルモデルと異なっているため、混乱を招くことがあり、ダブルクリックを使用してだと思う。