WinForm - TabStop不工作

时间:2010-08-24 19:12:50

标签: c# winforms radio-button groupbox tabstop

我有一个带有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);

2 个答案:

答案 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的行为不同,它们基于设置选项卡索引或在组框中放置单选按钮,在组或组中工作。