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

时间:2014-07-08 13:58:57

标签: c# winforms textbox

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

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

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 它只是完美地排序。 但是,如果用户单独键入,则在第5个字符之后B 4 G 4 F ...不会移动到下一个文本框。

我试图将其添加到:

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

但它失败了。

2 个答案:

答案 0 :(得分:1)

我要做的是检查文本框中文本的长度是否正好为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

您也可以将edTicket2.Focus();替换为SendKeys.Send("{TAB}")。这将使用下一个选项卡索引将焦点移至控件。因此,您必须确保选项卡索引的顺序正确

答案 1 :(得分:0)

您可以使用&#34;进入下一个控件。 this.SelectNextControl((Control)sender,true,true,true,true); &#34;

只需将文本框的文本更改放在下面的代码中即可生效

我使用了发件人,因此它适用于所有文本框。

    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
     }
    }