如何在Windows窗体中强制聚焦控件

16

我正在尝试将窗体应用程序中的“搜索”文本框控件聚焦。此文本框位于一个用户控件内,该用户控件位于一个面板内,而该面板又位于一个窗体内(如果这很重要的话)。 我尝试了我能找到的3种方法:

// 1
this.ActiveControl = myTextBox;

// 2
myTextBox.Focus();

// 3
myTextBox.Select();

这两种方法似乎都不起作用。我的意思是,例如当我尝试第一种方法时,活动控件确实设置为我的文本框,但是当我尝试使用键盘输入时,文本框不接受输入,我必须先单击文本框以获得焦点。所有的方法都是这样的。 我有遗漏什么吗?

2个回答

25

好的,终于找到答案了:

正如我所说的,我的文本框位于用户控件中,用户控件又位于面板中,面板又位于表单中。 当我需要使用我的用户控件时,我将其添加到面板中。要让我的文本框获得焦点,我必须首先让我的用户控件获得焦点,类似于这样: 在我的顶层表单中:

panel.Controls.Add(myUserControl);
myUserControl.Focus();

然后在我的用户控件中:

myTextBox.Select();
请注意,如果我使用myTextBox.Focus(),它不起作用(不知道为什么)。另外,如果我使用myUserControl.Select()而不是myUserControl.Focus(),它也不起作用。
这似乎是唯一可行的组合。

2
您可以按照以下逻辑步骤将控件设置为焦点:

your_control.Select();
your_control.Focus();

Enjoy! :)


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