调用initializecomponent()时如何停止为最低选项卡索引控制调用焦点?

时间:2014-01-12 17:04:21

标签: c# winforms controls

当我打开新表单时,所有控件都由表单构造函数中的InitializeComponent()初始化。这为具有最低选项卡索引的控件调用Focus()(尝试将每个选项卡索引增加1,从1开始,但它仍然使用选项卡索引1调用控件)。我怎样才能阻止在Focus()上调用InitializeComponent()所以之后,当我按下键上的右数组时,它会转到最低选项卡索引而不是最低选项卡索引+ 1?

1 个答案:

答案 0 :(得分:1)

  

如何在InitializeComponent()

上停止调用Focus()

你做不到。在WinForms中,焦点将始终转到启用和选择的第一个控件(根据选项卡索引)。只有在其中没有任何可选(和启用)控件时,焦点才会在Form上。

  

所以之后,当我在键上点击右侧数组时,它会进入最低标签索引而不是最低标签索引+ 1

你的意思并不是很清楚。您可以更改选项卡顺序,以选择在Form打开时首先选择哪个控件。如果您想隐藏焦点,您可以做的是派生自己的自定义控件,将其放在Form中并使用最低标签索引进行设置。它将集中在一个但用户不会看到它并且它不会互动(例如与键盘):

class DummyFocusControl : Control {
    DummyFocusControl() {
        SetStyle(ControlStyles.Selectable, true);
    }
}

然后,您始终可以使用Focus()Select()方法强制控件成为焦点(有关详细信息,请参阅MSDN,它们略有不同):

anotherControl.Focus(); // anotherControll will receive keyboard focus