在文本框中输入键以自动切换到下一个框
本文关键字:下一个 文本 输入 | 更新日期: 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
}
}