如何在Windows Forms应用程序中将焦点设置到控件?

40
在Windows表单应用程序中,我应该在什么时候编写代码才能在启动应用程序时以及在调用函数后随时将焦点设置到控件上?
例如,如果我有一个下拉列表、一个文本框和四个按钮,并且我希望焦点设置为下拉列表,我应该在哪里编写我的代码?
为了在应用程序启动时将焦点设置为特定的控件,我可以将选项卡索引设置为该下拉列表(假设TabStop属性设置为True,最小值即可)。
现在,如果用户完成操作(比如,任何一个Click按钮事件),然后我更新下拉列表,并在此之后想要设置焦点... 我可以这样做:
MyDropDownList.Focus()

问题

注意:该问题更关注何处,而不是如何


是的,在Click事件处理程序中。还有什么别的吗? - Hans Passant
@Hans Passant:那是针对后续操作的(用户操作之后)。我可以在Click事件处理程序中编写它,也可以在名为UpdateDropDownList()的函数中调用它,该函数在Click事件处理程序内部调用。但是对于初始加载,我应该在哪里编写它?在InitializeComponent()中还是在其调用之后? - Kanini
正确设置 TabIndex 属性是解决此问题的最佳且简单的方法。 - Khandakar Rashed Hassan
2个回答

81

到目前为止,最简单的解决方案是正确设置TabIndex属性,使你的'MyDropDownList'控件具有最低的索引值。下一个方法是在构造函数中完成。但是你必须使用Select()方法,因为Focus()方法不起作用,因为该控件直到稍后才变为可见状态。

Public Sub New()
    InitializeComponent()
    MyDropDownList.Select()
End Sub

在Load事件中也可以工作。 在Shown事件中开始使用Focus()。


1
+1 是因为我需要将它放在 Load 事件中才能使其在我的 C# 应用程序中正常工作! - Hybrid

8

当父窗口被激活(即接收到“Activated”事件)时,将焦点设置到您想要定位焦点的子控件上。

private void Form_AddAppID_Activated(object sender, EventArgs e)
{
    textID.Focus();
}

请注意,选项卡顺序与焦点开始的位置无关。相反,选项卡顺序用于决定用户按下Tab键时焦点如何转移。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接