我有一个激活向导,其中一个表单,我需要用户在文本框中输入键。
当用户粘贴整个密钥时,我已设法让它工作。但是,下一个框的自动标签对我来说是一个谜。
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;
}
但它失败了。
答案 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
}
}