我有一个带有3个组框的WinForm,一个带有组合框,另外两个带有单选按钮。我将所有这些和他们的子控件设置为“TabStop = false”,但是当我使用TAB循环时,最后两个组框中每个组中当前选中的单选按钮会被聚焦。
如果无法改变这种行为,那么抓住焦点并将焦点移开会有什么好处呢?我找不到“OnFocus”活动。
解决方案是设置一个方法(下面的代码)来处理表单中每个单选按钮的“Enter”事件(如果这是你想要的)。
实际上,我只对第一组组合框的单选按钮进行了操作,但是第二组框的单选按钮没有得到焦点,即使它们的“Enter”事件没有被处理。这不是你期望的行为。
private void radiobuttonXGroup1_Enter(object sender, EventArgs e)
{
SomeOtherControl.Focus();
}
在* .Designer.cs文件中,您编辑每个Enter事件(对于每个单选按钮)以指向一个事件处理程序(上述方法)。
this.radiobutton1Group1.Enter += new System.EventHandler(this.radiobuttonXGroup1_Enter);
this.radiobutton2Group1.Enter += new System.EventHandler(this.radiobuttonXGroup1_Enter);
this.radiobutton3Group1.Enter += new System.EventHandler(this.radiobuttonXGroup1_Enter);
答案 0 :(得分:5)
RadioButton.TabStop状态的MSDN文档“此API支持.NET Framework基础结构,不能直接在您的代码中使用”。这基本上意味着,“这不会像你期望的那样发挥作用”。
如上所述,当按钮获得焦点时,将触发Enter事件。您可以尝试使用它将焦点移动到另一个控件。
答案 1 :(得分:5)
在RadioButton上将TabStop设置为False以防止对控件进行制表工作,直到您选择单选按钮而没有像@msergeant建议的任何其他覆盖一样。
修改强>
以下代码阻止代码获取Tab键事件:
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
radioButton1.TabStop = false;
}
单选按钮与其他控件的Tab的行为不同,它们基于设置选项卡索引或在组框中放置单选按钮,在组或组中工作。