我希望当用户键入/更改textBox1的文本时,同时清除第二个textBox2的文本。为此,我仅向表单添加了一个事件:

private void textBox1_TextChanged(object sender, EventArgs e)
    {
        this.textBox2.Text = "";
    }


但是,这导致textBox2被清除,但用户键入的输入丢失。几乎:

我期望的是:
如果textBox1文本为空,而textBox2不是,当用户在第一个文本框中键入“ A”时,我将同时清除textBox2和字母“ A”进入textBox1

我得到的是:
textBox2变得很清楚,但是textBox1中没有出现字母“ A”:我将不得不再次键入它才能将其放入正确的位置。

清除textBox1时如何使用户输入textBox2

编辑:实际上忘记添加代码的重要部分,这是我上面发布的方法的“孪生兄弟”:

private void textBox2_TextChanged(object sender, EventArgs e)
    {
        this.textBox1.Text = "";
    }


我稍作修改:我如何满足我的预期行为,同时又避免textBox2中的清除被视为text_changed事件?

最佳答案

您可以禁用事件处理程序,以避免一个事件干扰另一个事件。
您也可以使用全局布尔变量,但是我更喜欢这种方法,因为它不需要全局变量,也不需要if

private void textBox1_TextChanged(object sender, EventArgs e)
{
    this.textBox2.TextChanged -= textBox2_TextChanged;
    this.textBox2.Text = "";
    this.textBox2.TextChanged += textBox2_TextChanged;
}

private void textBox2_TextChanged(object sender, EventArgs e)
{
    this.textBox1.TextChanged -= textBox1_TextChanged;
    this.textBox1.Text = "";
    this.textBox1.TextChanged += textBox1_TextChanged;
}

10-04 17:28