c # какой элемент управления wpf использовать для отображения текстового файла - PullRequest
3 голосов
/ 21 мая 2011

Как лучше всего использовать wpf-приложение для загрузки больших текстовых файлов? И это не просто, мне нужно иметь возможность выделить / изменить фон / цвет некоторых линий. Я думал об использовании RichTextBox ... но хотя я просто пришел и спросил, что думают другие люди.

Мне не нужно редактировать текст, просто выделите строки с ошибками

РЕДАКТИРОВАТЬ: Ах, я забыл упомянуть, текстовый файл обрабатывается программой, что изменит цвет фона некоторых строк. Было бы неплохо дать пользователю возможность сделать это, когда программа не может найти строки ошибок.

EDIT2: приложение предназначено для анализа файлов журнала, поэтому файлы могут быть большими, более 50 000 строк ..

Ответы [ 2 ]

2 голосов
/ 21 мая 2011

Я не понял, хотите ли вы только отображать файлы или разрешать пользователю редактировать их.

В любом случае, возможно, ScintillaNET будет вам полезен.

Хорошо известный текстовый редактор, Notepad ++ использует Scintilla :)

Вы можете получить источники notepad ++ на http://sourceforge.net/projects/notepad-plus/,, но написано на c ++, поэтому API будет немного отличаться от.NET.

РЕДАКТИРОВАТЬ

Notepad ++ способен отображать файлы размером около 100-200 МБ.Если вам нужно лучше, вам нужно реализовать какую-то технологию пейджинга / виртуальный режим (не загружать весь файл, только часть, которая будет отображаться на экране в зависимости от текущей позиции полосы прокрутки)

ЕслиСцинтилла кажется излишним, тогда, возможно, вам лучше просто построить DataGrid.Если записи журнала состоят из нескольких полей, они могут стать столбцами и их будет еще проще читать.Если вы хотите пойти по этому пути, сначала разберите ваш файл журнала в список LogEntry, а затем используйте привязку данных для привязки к нему.Вы можете читать ваш файл постепенно, по мере добавления новых строк для лучшего взаимодействия с пользователем.

1 голос
/ 21 мая 2011

Я думаю, что RichTextBox будет наиболее подходящим в этом случае, но, как сказал CharithJ, вы не можете загрузить в него весь журнал за один раз, это будет слишком сильно ухудшать производительность.

Что бы я сделал в таком сценарии ... У меня будет Richtextbox вместе с двумя маленькими кнопками вверх и вниз для прокрутки. Я загружу только один текст журнала, скажем, х количество символов. Когда пользователь нажимает кнопку прокрутки вверх или вниз, я удаляю некоторый текст из начала и конца в зависимости от того, какую кнопку нажимал пользователь, вверх или вниз, и на основании этого я удаляю какой-то текст из richbox и добавляю другой.

Либо вы можете сделать что-то, как я предложил выше, либо другим способом было бы расширить элемент управления RichTextBox и реализовать логику, которая перенаправляет только ограниченный текст до RichTextBox для отображения за один раз. Вы можете обрабатывать события, связанные с прокруткой, чтобы вносить изменения в содержимое RichTextBox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...