TextBox 重新获得焦点,而其他控件则没有
Posted
技术标签:
【中文标题】TextBox 重新获得焦点,而其他控件则没有【英文标题】:TextBox took back focus while other controls don't 【发布时间】:2021-10-10 06:13:42 【问题描述】:当我离开另一个文本框时,我想专注于一个文本框。 假设我有 3 个文本框。焦点在第一个,当我点击第二个时,我想把焦点放在最后一个。 我订阅了第一个文本框的离开事件,并尝试关注第三个文本框,例如:third.Focus()。它获得了一段时间的焦点,但第二个最终得到了它(我点击的那个)。 奇怪的是,如果我将第二个 TextBox 替换为 MaskedTextBox(或任何其他控件),焦点仍然在第三个。 不过按 Tab 确实有效。
这些是工具箱中的纯文本框。
这是什么原因,我该如何解决?
【问题讨论】:
【参考方案1】:尝试处理 textBox2 的 Enter 事件。 (在属性窗口中双击 Enter 事件)
//From Form1.Designer.cs
this.textBox2.Enter += new System.EventHandler(this.textBox2_Enter);
private void textBox2_Enter(object sender, EventArgs e)
textBox3.Focus();
编辑:
这段代码看起来很奇怪,但它对我有用。根据这篇文章HERE 我使用ActiveControl
属性而不是Focus()
方法。但是 TextBox 的行为很奇怪,因为它会尝试多次聚焦。
public partial class Form1 : Form
public Form1()
InitializeComponent();
foreach (Control control in Controls)
control.LostFocus += (s, e) => Console.WriteLine(control.Name + " LostFocus");
control.GotFocus += (s, e) =>
Console.WriteLine(control.Name + " GotFocus");
if (!requestedFocusToTextBox2) return;
ActiveControl = textBox2; //textBox2.Focus() doesn't work
requestedFocusToTextBox2 = false;
;
private bool requestedFocusToTextBox2;
private void textBox1_Leave(object sender, EventArgs e)
ActiveControl = textBox2;
requestedFocusToTextBox2 = true;
【讨论】:
第二个文本框应保持可编辑/可点击状态,因此始终无法返回焦点。 我不理解您要求的行为。你可以使用TabOrder
和TabStop
属性吗?是否可以对Enter
事件实施某些条件?
当我离开一个特定的文本框(点击按钮或其他)时,另一个特定的文本框应该被聚焦,离开另一个文本框不应该激活聚焦。
我用另一个例子编辑了我的帖子。这对我有用,但我不知道这是否是最好的方法以上是关于TextBox 重新获得焦点,而其他控件则没有的主要内容,如果未能解决你的问题,请参考以下文章
C# 简单的方法统一设置控件在焦点获得时,背景色改变,焦点离开时背景色恢复默认