如何从WinForms中的TextBox中删除焦点?

Cal*_*ers 107 .net c# textbox focus winforms

我需要从几个TextBox中删除焦点.我试过用:

textBox1.Focused = false;
Run Code Online (Sandbox Code Playgroud)

它的ReadOnly属性值是true.

然后我尝试将焦点设置在表单上,​​以便从所有TextBox中删除它,但这也无法工作:

this.Focus();
Run Code Online (Sandbox Code Playgroud)

并且在false选择文本框时返回该函数.

那么,如何从TextBox中删除焦点?

Hen*_*man 108

您需要一些其他可聚焦控制来将焦点移动到.

请注意,您可以将焦点设置为标签.您可能想要考虑[Tab]键的下一步.

另请注意,您无法将其设置为表单.像Form和Panel这样的容器控件会将Focus传递给他们的第一个子控件.这可能是你希望它远离的TextBox.

  • 容器控件(Form,Panel)会将Focus传递给他们的第一个子控件. (7认同)

Why*_*ous 59

专注于标签对我来说不起作用,做label1.Focus()正确的事情?加载表单时文本框仍然具有焦点,但是尝试Velociraptors 回答,为我工作,将Form的Active控件设置为标签,如下所示:

private void Form1_Load(object sender, EventArgs e)  
{ 
    this.ActiveControl = label1;       
}
Run Code Online (Sandbox Code Playgroud)

  • 我希望我能给你百万箭头.我尝试了人们建议的其他一切,这是唯一有效的.由于某种原因,文本框总是从所有东西中偷走焦点...... (6认同)
  • 这也适用于像面板这样的容器控件.我只想彻底删除焦点并且它有效:`this.ActiveControl = panelOnMyForm;` (3认同)

小智 44

您可以添加以下代码:

this.ActiveControl = null;  //this = form
Run Code Online (Sandbox Code Playgroud)

  • 我相信这是最好的答案.如果您阅读MSDN,许多其他方法(如"Focus")都会被列为控制设计人员的低级方法.如果您希望其他所有内容都"未被选中",那么这似乎是最简单的方法,因为它只是一条小线. (7认同)
  • 这可能是微软最初添加此属性的一半原因。 (2认同)

Spe*_*ort 31

尝试禁用和启用文本框.

  • 这非常灵活,因为它同时自动选择选项卡列表中的下一个控件. (5认同)
  • 我正在使用MVVM在Silverlight中开发,并使用针对TextBox的行为实现了这一点.由于我没有其他UIElement方便将焦点设置为禁用/启用解决方案的工作奇迹.谢谢! (3认同)
  • @miguelmpn `textBox1.Enabled = false;` 将禁用您的文本框。并将其设置为“true”将重新启用它。 (2认同)

小智 22

You can also set the forms activecontrol property to null like

ActiveControl = null;
Run Code Online (Sandbox Code Playgroud)

  • 我希望人们一直向下滚动,不要只使用标记为答案的解决方法 (7认同)

Vel*_*ors 8

Focus设置输入焦点,因此将其设置为表单将不起作用,因为表单不接受输入.尝试将表单的ActiveControl属性设置为其他控件.您还可以使用Select选择特定控件或SelectNextControl在Tab键顺序中选择下一个控件.


小智 8

试试这个:

首先设置Tab键顺序.

然后在表单加载事件中,我们可以通过编程方式向应用程序发送Tab键.因此,该应用程序将在Tab键顺序中将焦点放在第一个控制器上.

在表单加载甚至写这一行.

SendKeys.Send("{TAB}");
Run Code Online (Sandbox Code Playgroud)

这确实对我有用.