有没有办法在不触发文本更改的情况下清除文本框的文本?



在我的应用程序中,我希望在某些情况下处理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事件

相关内容

  • 没有找到相关文章

最新更新