如何在使用TextChanged输入输入前清除字段?

New*_*der 3 c# winforms

所以我想要做的是能够连续输入所有10个文本框.我从第一个开始,然后输入3个字符后将焦点改为焦点,然后输入3个字符,重点放在下一个字符上.

我已经完成了那部分,但如果第二个文本框中已有文本怎么办?我尝试了Clear(),但它创建了一个错误,不允许我输入超过1个字符.

因此,当所有文本框都填充有垃圾数据时,因此当我开始在第一个文本框123处键入时,然后移动到第二个文本框456第三个789等.但是下一个字段首先被清除.

我正在努力解决这个问题:

    public PingIPRange()
    {
        InitializeComponent();

        txtF1.TextChanged += new EventHandler(NextField);
        txtF2.TextChanged += new EventHandler(NextField);
        txtF3.TextChanged += new EventHandler(NextField);
        txtF4.TextChanged += new EventHandler(NextField);

        txtT1.TextChanged += new EventHandler(NextField);
        txtT2.TextChanged += new EventHandler(NextField);
        txtT3.TextChanged += new EventHandler(NextField);
        txtT4.TextChanged += new EventHandler(NextField);

        txtInterval.TextChanged += new EventHandler(NextField);
        txtRepeat.TextChanged += new EventHandler(NextField);
    }

    private void NextField(object sender, EventArgs e)
    {
        if (txtF1.TextLength == 3)
        {
            txtF2.Focus();              
        }
        if (txtF2.TextLength == 3)
        {
            txtF3.Focus();
        }
        if (txtF3.TextLength == 3)
        {
            txtF4.Focus();
        }
        if (txtF4.TextLength == 3)
        {
            txtT1.Focus();
        }
        if (txtT1.TextLength == 3)
        {
            txtT2.Focus();
        }
        if (txtT2.TextLength == 3)
        {
            txtT3.Focus();
        }
        if (txtT3.TextLength == 3)
        {
            txtT4.Focus();
        }
        if (txtT4.TextLength == 3)
        {
            txtInterval.Focus();
        }
        if (txtInterval.TextLength == 3)
        {
            txtRepeat.Focus();
        }
        if (txtRepeat.TextLength == 3)
        {
            btnPing.Focus();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Lar*_*ech 5

Enter为TextBoxes 添加事件,并对SelectAll文本执行操作.

txtF2.Enter += SelectTextOnEnter;
txtF3.Enter += SelectTextOnEnter;
// etc.


private void SelectTextOnEnter(object sender, EventArgs e) { 
  ((TextBox)sender).SelectAll();
}
Run Code Online (Sandbox Code Playgroud)

此外,您的NextField方法并不完全符合您的想法.确保您的控件TabIndex值的顺序正确,然后尝试将代码更改为:

private void NextField(object sender, EventArgs e) {
  if (((TextBox)sender).Text.Length == 3)
    this.SelectNextControl((Control)sender, true, true, false, false);
}
Run Code Online (Sandbox Code Playgroud)

它将根据表单的Tab键顺序选择下一个控件.