在文本框中输入键以自动切换到下一个框

本文关键字:下一个 文本 输入 | 更新日期: 2023-09-27 18:12:10

我有一个激活向导,其中一个表单,我需要用户在文本框中输入键。

我已经设法让它在用户粘贴整个密钥时工作。然而,自动标签下一个框对我来说是一个谜。

namespace ActivationWiz
{
    public partial class frmEnterTicket : ActivationWiz.frmTemplate
    {
        public frmEnterTicket()
        {
            InitializeComponent();
        }
        /// <summary>
        /// Checks if a complete ticket was pasted and distributes it into all 5 input fields
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void edTicket1_TextChanged(object sender, EventArgs e)
        {            
            if (edTicket1.Text.Length > 5)
            {
                string[] temp = edTicket1.Text.Split('-');
                for (int i = 0; i < temp.Length; i++)
                {
                    switch (i)
                    {
                        case 0:
                            edTicket1.Text = temp[0].Trim();
                            break;
                        case 1:
                            edTicket2.Text = temp[1].Trim();
                            break;
                        case 2:
                            edTicket3.Text = temp[2].Trim();
                            break;
                        case 3:
                            edTicket4.Text = temp[3].Trim();
                            break;
                        case 4:
                            edTicket5.Text = temp[4].Trim();
                            break;
                    }
                }
            }
        }
    }
}

所以这里当用户复制并粘贴例如:B4G4F-TZQYJ-2DJDJ-47NZ3-4ZJ5Y它只是完美地自我整理。然而,如果用户单独输入,b4g4f…在第5个字符之后,它不会移动到下一个文本框。

我试着把这个添加到:

if (temp[temp.Length - 1].Length > 5)
{
    string t = temp[temp.Length - 1];
    t = t.Substring(0, 5);
    temp[temp.Length - 1] = t;
}

但是失败了

在文本框中输入键以自动切换到下一个框

我要做的是检查文本框中的文本长度是否正好是5。如果是,使用.Focus()将焦点更改为下一个复选框

private void edTicket1_TextChanged(object sender, EventArgs e)
{
    if (edTicket1.Text.Length == 5)
    {
        edTicket2.Focus();
    }
    else if (edTicket1.Text.Length > 5)
    {
        ... // What you have
    }
}
...   // Repeat for other textboxes

也可以用SendKeys.Send("{TAB}")代替edTicket2.Focus();。这将把焦点移到具有下一个选项卡索引的控件上。所以你需要确保制表符索引的顺序正确

你可以使用this.SelectNextControl((control)sender, true, true, true, true);"

只要把文本框的文本更改到下面的代码,它就会工作了

我使用了sender,所以它将在所有的文本框上工作。

    private void Key_TextChanged(object sender, EventArgs e)
    {
      TextBox TB = (TextBox)sender;
        if (TB.Text.Length == 5)
        {
        this.SelectNextControl((Control)sender, true, true, true, true);
        }
     else if (TB.Text.Length > 5)
     {
     // code
     }
    }
相关文章: