WPF - Избегайте получения события TextChanged, запускаемого при загрузке файла в RichTexBox - PullRequest
0 голосов
/ 25 апреля 2019

Вопрос : Есть ли способ обнаружить возникновение загрузки файла в RichTextBox (RTB) приложения WPF? Я не нашел такого события в этом списке событий; или, может быть, в этом списке есть какое-то событие, которое можно использовать для решения следующих задач:

Фон Я разрешаю пользователю загрузить файл в RTB и закрыть его после внесения изменений (при необходимости). Но перед тем, как пользователь закрывает файл, мое приложение проверяет, были ли внесены изменения, помещая флаг bTextChanged в событие TextChanged . Но я заметил, что событие TextChanged запускается даже при загрузке файла. И что еще хуже, событие запускается для каждого символа вновь загруженного файла - что в конечном итоге может привести к снижению производительности приложения, если загруженный файл слишком длинный. так что, возможно, есть обходной путь, чтобы событие TextChanged срабатывало только при изменении текста в файле после загрузки файла.

public partial class MainWindow : Window
{
    string sgFileName = "";
    bool bTextChanged = false;
    ....
    ....
        private void BtnOpenFile_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Filter = "Rich Text Format (*.rtf)|*.rtf|All files (*.*)|*.*";
            if (dlg.ShowDialog() == true)
            {
                sgFileName = dlg.FileName;
                FileStream fileStream = new FileStream(sgFileName, FileMode.Open);
                TextRange range = new TextRange(mainRTB.Document.ContentStart, mainRTB.Document.ContentEnd);
                range.Load(fileStream, DataFormats.Rtf);
            }
        }

        private void MainRTB_TextChanged(object sender, TextChangedEventArgs e)
        {
            bTextChanged = true;
        }

    private void BtnCloseDocument_Click(object sender, RoutedEventArgs e)
    {
        if (bTextChanged)
        {
            MessageBoxResult result = MessageBox.Show("Content has changed, do you want to save the changes?", "Content has Changed!", MessageBoxButton.YesNoCancel);
            switch (result)
            {
                ....
            }
        }
    }
....
....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...