我希望当用户键入/更改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;
}