4

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

2 回答 2

7

在 RadioButton 上将 TabStop 设置为 False 以防止对控件进行制表符,直到您实际选择了单选按钮,而没有像 @msergeant 建议的那样进行任何额外的覆盖。

编辑

以下代码可防止代码获取 Tab 键事件:

private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
   radioButton1.TabStop = false;
}

单选按钮的行为与其他控件的选项卡不同,因为它们基于设置选项卡索引或将单选按钮放置在组框中以集合或组的形式工作。

于 2010-08-25T17:00:47.893 回答
5

RadioButton.TabStop的 MSDN 文档指出“此 API 支持 .NET Framework 基础结构,不打算直接从您的代码中使用”。这基本上意味着,“这不会像你期望的那样工作”。

话虽如此,当按钮获得焦点时,将触发 Enter 事件。您可以尝试使用它将焦点移动到另一个控件。

于 2010-08-25T16:40:54.183 回答