【问题标题】:How may I automatically change focus from textBox1 to textBox2 after populating textBox1?填充 textBox1 后,如何自动将焦点从 textBox1 更改为 textBox2?
【发布时间】:2017-04-07 14:13:41
【问题描述】:

我创建了一个库存定位器/移动器程序。场景顺序如下:

  • 首先,用户将二维码扫描到 textBox1 中,然后将位置扫描到 textBox2 中。
  • 接下来,将执行更新语句,从而“移动”库存的位置。

如何在 textBox1 填充二维码后自动将光标移动到 textBox2 中?

请注意二维码的长度不同。这使我无法使用 textBox 最大长度。我目前尝试了以下方法:

private void textBox1_TextChanged(object sender, EventArgs e)
        {
            //part number textbox
            var partNumber = textBox1.Text;
            partNumber = partNumber.TrimEnd('\r', '\n');

            if (textBox1.Text!=null)
            {
                textBox1.Select();
            }
            else
            {
                textBox2.Select();
            }
        }

使用上述代码,将二维码的第一个字符输入到 textBox1 中,其余字符输入到 textBox2 中。愿望是让所有的二维码字符都在 textBox1 中,然后让光标改变焦点到 textBox2。

【问题讨论】:

  • 大多数扫描仪都可以选择在读取值的末尾附加一个回车符|+换行符来处理这个要求,看看你是否这样做。
  • @Gudgip 这个问题与这个问题没有任何关系。
  • 仅供参考,textBox1.TextTextChanged 事件中永远不会是null。如果是这样,您对.TrimEnd 的调用将引发空引用异常。
  • 您可以在 QR 的末尾添加一个字符串,在更改的事件中您可以检查字符串是否出现在 QR 中
  • 看起来您正在丢弃需要检测第一个字段已完全输入的字符。使用 KeyDown 事件来检测它,使用 e.Handled = e.SuppressKeyPress = true 来防止它被添加到文本框。

标签: c# .net textbox focus


【解决方案1】:

解决方案;

        private void textBox1_KeyPress(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            textBox2.Select();
        }
    }

然后转到textBox1的属性并将'KeyDown'设置为'Events'下的textBox1_KeyPress并且它可以工作。

【讨论】:

    【解决方案2】:

    在 SE 上的另一个问题中描述了类似的问题。

    您可能会对esskar 发布的以下answer 感兴趣。 由于扫描仪可能只需要一瞬间将 QR 码扫描到 TextBox 中,因此您可以使用该答案中的技术在 TextChanged 触发时启动计时器。我将 Timer 的间隔设置为 500 毫秒左右,这应该足够了,一旦它触发,您就可以非常确定 QR 码在 TextBox 内。

    显然这不是一个完美的解决方案,因为在某些情况下,扫描仪可能会滞后,或者出于某种原因根本无法在该时间范围内发送 QR 码。

    在继续之前,您需要检查常见的二维码长度并验证代码。

    明确一点:不需要创建新类型的 TextBox。 只需在触发 TextChanged 时启动 Timer。

    【讨论】:

    • 谢谢你的建议,我去看看:)
    • @WillHoward,为了清楚起见,我不建议您按照该答案中的建议创建一个新的 TextBox 实现。相反,您只需在触发 TextChange 事件后创建一个间隔为 500 毫秒的 Timer 实例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多