如何使用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();
        }
    }

如何使用TextChanged属性将12个连续数字粘贴到4个文本框中

尝试将此代码放入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。

TextLength - 9)和子字符串中的3不会有outtofbound问题对于txtF4,对于txtF3和txtF2也是如此。

您可以在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();
    }