【问题标题】:TextBox took back focus while other controls don'tTextBox 重新获得焦点,而其他控件则没有
【发布时间】:2021-10-10 06:13:42
【问题描述】:

当我离开另一个文本框时,我想专注于一个文本框。 假设我有 3 个文本框。焦点在第一个,当我点击第二个时,我想把焦点放在最后一个。 我订阅了第一个文本框的离开事件,并尝试关注第三个文本框,例如:third.Focus()。它获得了一段时间的焦点,但第二个最终得到了它(我点击的那个)。 奇怪的是,如果我将第二个 TextBox 替换为 MaskedTextBox(或任何其他控件),焦点仍然在第三个。 不过按 Tab 确实有效。

这些是工具箱中的纯文本框。

这是什么原因,我该如何解决?

【问题讨论】:

    标签: c# winforms textbox


    【解决方案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;
            }
        }
    

    【讨论】:

    • 第二个文本框应保持可编辑/可点击状态,因此始终无法返回焦点。
    • 我不理解您要求的行为。你可以使用TabOrderTabStop 属性吗?是否可以对Enter 事件实施某些条件?
    • 当我离开一个特定的文本框(点击按钮或其他)时,另一个特定的文本框应该被聚焦,离开另一个文本框不应该激活聚焦。
    • 我用另一个例子编辑了我的帖子。这对我有用,但我不知道这是否是最好的方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多