如何使用TextChanged属性将12个连续数字粘贴到4个文本框中
本文关键字:4个 文本 数字 TextChanged 何使用 属性 连续 12个 | 更新日期: 2023-09-27 18:17:43
我试图能够粘贴(鼠标或键盘快捷键)一个12位数字(IP地址,但没有期间)到4个字段。每个最大长度为3。
我试图通过使用TextChange,文本框,属性来做到这一点。我试图使用Substring,但它不是每个八位元组工作。
public PingIPRange()
{
InitializeComponent();
txtF1.TextChanged += new EventHandler(NextField);
txtF2.TextChanged += new EventHandler(NextField);
txtF3.TextChanged += new EventHandler(NextField);
}
private void NextField(object sender, EventArgs e)
{
if (txtF1.TextLength == 3)
{
txtF2.Focus();
txtF1.Text = txtF1.Text.Substring(0, 3);
txtF2.Text = txtF1.Text.Substring(3, 30);
}
if (txtF2.TextLength == 3)
{
txtF3.Text = txtF2.Text.Substring(3, 27);
txtF3.Focus();
}
if (txtF3.TextLength == 3)
{
txtF4.Focus();
}
}
尝试将此代码放入NextField方法中。仅连接到txtF1文本框textchange事件
TextBox txt = (TextBox) sender;
var s1 = txt.Text.Split('.');
if(s1.Length==4)
{
txtF1.Text = s1[0];
txtF2.Text = s1[1];
txtF3.Text = s1[2];
txtF4.Text = s1[3];
}
UPDATE:因为你已经更新了问题,不会有任何点符号,你可以像这样分割字符串
var s1=Enumrable
.Range(0,4)
.Select(i => txt.Text.Substring(i * 3, 3))
.ToArray();
当您试图在TextChanged处理程序中更改文本时,这将不起作用-因此它将再次启动自己。当长度为3时,为什么不让事件处理程序将焦点更改为下一个框,这样可以避免循环循环。
仅在TextF1中粘贴时有效。
public PingIPRange()
{
InitializeComponent();
txtF1.TextChanged += new EventHandler(PasteNumbers);
}
private void PasteNumbers(object sender, EventArgs e)
{
if (txtF1.TextLength > 9) { txtF4.Text = txtF1.Text.Substring(9, 3); }
if (txtF1.TextLength > 6) { txtF3.Text = txtF1.Text.Substring(6, 3); }
if (txtF1.TextLength > 3)
{
txtF2.Text = txtF1.Text.Substring(3, 3);
txtF1.Text = txtF1.Text.Substring(0, 3);
}
}
编辑,为了完全正确,您需要在(txtF1。
您可以在txtF1上设置KeyUp和MouseUp事件,并使用以下代码:
private void txtF1_KeyUp(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.V)
{
PasteText();
}
}
private void txtF1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right &&
((TextBox)sender).Modified)
{
PasteText();
}
}
private void PasteText()
{
string[] val = txtF1.Text.Split('.');
txtF1.Text = val[0].ToString();
txtF2.Text = val[1].ToString();
txtF3.Text = val[2].ToString();
txtF4.Text = val[3].ToString();
}