Сначала, чтобы получить доступ к вашему TextBox во время поиска, вы должны поместить свой поиск в BackgroundWorker
и поместить (промежуточные) результаты с BeginInvoke()
в свой TextBox. Таким образом, ваш графический интерфейс не зависает при выполнении поиска.
Также вы должны использовать метод TextBox.AppendText()
, чтобы добавить текст в поле. И если вы хотите автоматическую прокрутку, используйте два вкладыша ниже после AppendText:
textBoxMessages.SelectionStart = textBoxMessages.Text.Length;
textBoxMessages.ScrollToCaret();
И если вы хотите включить / отключить автоматическую прокрутку, вы можете перед тем, как AppendText проверить, равен ли SelectionStart Text.Lenght и только если это правда, сделать два вышеупомянутых вкладыша после AppendText
Обновление
Хорошо, чтобы избавиться от от мерцания , в текстовом поле нет реального решения. Когда я упомянул правильно, вы можете попробовать RichTextBox, потому что он лучше справляется с этими проблемами прокрутки.
Не в последнюю очередь вы можете использовать ScintillaNET . Я использовал его уже несколько раз, и для этих целей он решает все проблемы.
Единственное, что вы не можете сделать элегантно с помощью ScintillaNet (или лучше с Scintilla), это раскрасить вручную пользовательский раздел. Вы всегда должны использовать лексер, который работает с предопределенным форматированием в списке ключевых слов.