在我的应用程序中,我希望在某些情况下处理TextBox
输入(例如,某些条件未填充),因为KeyDown
仅对键盘输入有用,但不适用于实际粘贴从剪贴板(我不想经历使用Win32调用的麻烦),我想我只是处理我的主要TextBox' TextChanged
事件中的所有内容。但是,当有什么东西"错误"并且用户不应该输入它,如果我要在其上调用TextBox.Clear();
,TextChanged会再次触发,这是可以理解的,因此消息也会显示两次。那有点烦人。我只能在这种情况下处理TextChanged?示例代码(在txtMyText_TextChanged
内):
if (txtMyOtherText.Text == string.Empty)
{
MessageBox.Show("The other text field should not be empty.");
txtMyText.Clear(); // This fires the TextChanged event a second time, which I don't want.
return;
}
答案 0 :(得分:6)
如何在更改之前断开事件处理程序并在之后重新连接?
if (txtMyOtherText.Text == string.Empty)
{
MessageBox.Show("The other text field should not be empty.");
txtMyText.TextChanged -= textMyText_TextChanged;
txtMyText.Clear();
txtMyText.TextChanged += textMyText_TextChanged;
return;
}
在更复杂的情况下,最好有一个try / finally并重新启用finally部分中的TextChanged事件