Есть ли способ очистить текст TextBox без срабатывания TextChanged?

В моем приложении я хотел бы обрабатывать ввод 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;
} 

person Dimitris Iliadis    schedule 18.01.2014    source источник


Ответы (1)


Как насчет отключения обработчика событий перед изменением и повторного подключения после него?

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 и повторно активировать событие TextChanged в части finally.

person Steve    schedule 18.01.2014
comment
Это никогда не приходило мне в голову. Спасибо большое за помощь. :) - person Dimitris Iliadis; 18.01.2014