Ant*_*Ant 9 .net double-click radio-button winforms
我希望能够从标准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 );
}
}
}
Run Code Online (Sandbox Code Playgroud)
有更简单,更清洁的方法吗?
编辑:关于背景,我同意Raymond Chen的帖子在这里,要双击一个单选按钮(如果这些都是能力只有对话框上的控件),使对话只是一点点更容易使用,谁知道这件事的人.
在Vista中使用任务对话框(请参阅此Microsoft指南页面或此MSDN页面专门针对任务对话框API)将是明显的解决方案,但我们没有那么奢侈.
小智 11
根据您的原始建议,我提出了一个解决方案,而无需使用反射对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;
Run Code Online (Sandbox Code Playgroud)
现在触发了radiobutton的双击事件.顺便说一句:Nate使用e.Clicks的建议不起作用.在我的测试中,无论多快或经常点击无线电按钮,e.Clicks总是1.