2009-09-21 3 views
1

У меня есть RichTextBox, который я хочу переформатировать, когда изменяется содержимое RichTextBox. У меня есть обработчик событий TextChanged.WinForms RichTextBox: как выполнить форматирование на TextChanged?

Повторное форматирование (изменение цветов выбранных областей) вызывает событие TextChanged. Это приводит к бесконечному циклу события TextChange, форматированию, событию TextChange, переформатированию и т. Д.

Как я могу отличить текстовые изменения от приложения и текстовые изменения от пользователя?

Я мог проверить длину текста, но не уверен, что это совершенно правильно.

ответ

3

Вы можете иметь флаг, указывающий Ий ли вы уже внутри TextChanged обработки:

private bool _isUpdating = false; 
private void Control_TextChanged(object sender, EventArgs e) 
{ 
    if (_isUpdating) 
    { 
     return; 
    } 

    try 
    { 
     _isUpdating = true; 
     // do your updates 
    } 
    finally 
    { 
     _isUpdating = false; 
    } 
} 

Таким образом, вы перестаете дополнительное TextChanged события от создания цикла.

+0

Это хорошо, но имейте в виду, что _исполнение должно использоваться везде, где приложение меняет текст richtextbox, а не только внутри обработчика. – xpda

Смежные вопросы