在我的应用程序中,我希望在某些情况下处理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;
}
在更改之前断开事件处理程序的连接,然后重新连接怎么样?
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;
}
在更复杂的情况下,最好在finally部分中进行try/finaly并重新启用TextChanged事件