WinForms RichTextBox: как выполнить форматирование на TextChanged? - PullRequest
1 голос
/ 22 сентября 2009

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

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

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

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

1 Ответ

3 голосов
/ 22 сентября 2009

Вы можете иметь флаг bool, указывающий, находитесь ли вы уже в обработке 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 события от создания цикла.

...