• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

как разукрасить Richtextbox?

  • Автор темы iv4258
  • Дата начала
Статус
Закрыто для дальнейших ответов.
I

iv4258

Подскажите пожалуйста, как в richTextBox для разных кусков текста, установить различный цвет, толщину и т.п.?
Неужели необходимо работать на уровне rtf-тегов через свойство RTF или SelectedRTF компонента?
А есть ли более простой вариант?
 
I

iv4258

Большое спасибо. Я как всегда невнимательно документацию читал :ph34r:
 
I

iceheart

Допустим, нужно сделать полужирным выделенный фрагмент текста. По документации нужно изменить свойство SelectionFont. Это сделать совсем несложно, но...
Хорошо, если вся изменяемая область написана одинаковым шрифтом. А вот если куда-то в серединке закрался, скажем, курсив или другой размер шрифта, или и вовсе другой шрифт? "Умный" .NET в свойстве SelectionFont даёт усреднённый результат, и если это свойство переписать (а переписать его можно только целиком, иначе ругается), то всё выделение будет оформлено одним шрифтом, Как же изменить только один атрибут оформления, не убив форматирования внутри текста? Если это можно сделать только посимвольно, то как?

И ещё. В документации есть интересный раздел про команды. Дескать, всё что нужно, это написать EditingCommands.ToggleBold и программа всё сделает сама. Но ни ApplicationCommands, ни EditingCommands студия при компиляции не распознаёт, да и обещанного свойства Command у кнопочек на панели инструментов нету. Под MSDN2008 статья находится в link removed,
Может я чего-то путаю?
 
I

iceheart

Сначала отвечу на свой собственный вопрос, а то он путает всю тему:
Может я чего-то путаю?
Истинно так. Первый абзац относится целиком и полностью к System.Windows.Forms.RichEditBox, а второй - к System.Windows.Controls.RichEditBox.
Допустим, нужно сделать полужирным выделенный фрагмент текста. По документации нужно изменить свойство SelectionFont. Это сделать совсем несложно, но...
Хорошо, если вся изменяемая область написана одинаковым шрифтом. А вот если куда-то в серединке закрался, скажем, курсив или другой размер шрифта, или и вовсе другой шрифт? "Умный" .NET в свойстве SelectionFont даёт усреднённый результат, и если это свойство переписать (а переписать его можно только целиком, иначе ругается), то всё выделение будет оформлено одним шрифтом, Как же изменить только один атрибут оформления, не убив форматирования внутри текста? Если это можно сделать только посимвольно, то как?
Формсовый эдитбокс вообще умеет меньше и хуже, чем ВПФовый. Функции для работы с форматированием довольно бедны, но редактировать содержимое программно всё же можно, для этого нужно забрать текущее содержимое контрола через свойство Rtf, переделать его как нужно и загнать обратно. Единственная проблема здесь - что содержимое это, как следует из названия свойства, представлено в формате RTF, и редактировать его напрямую несподручно. Но можно использовать библиотеки, например, NRtfTree, чтобы представить ртф в более наглядном виде, переделать, что надо, или даже экспортировать в другой формат. Но всех проблем это не решает, к примеру, в формсовом эдитбоксе никак нельзя напрямую узнать, какая часть текста выделена. А ещё у этого контрола большие проблемы с рисунками. То есть вставлять их можно только через DragAndDrop, настроив соответствующее свойство (или вручную в RTF :) ), при этому они отображаются на самом контроле как белые прямоугольники с надписью "Bitmap[JPEG, GIF, ...] Image" посередине. Если я не прав, поправьте, будет очень приятно.
И ещё. В документации есть интересный раздел про команды. Дескать, всё что нужно, это написать EditingCommands.ToggleBold и программа всё сделает сама. Но ни ApplicationCommands, ни EditingCommands студия при компиляции не распознаёт, да и обещанного свойства Command у кнопочек на панели инструментов нету. Под MSDN2008 статья находится в link removed,
Тут всё просто. Как в соседнем топике написал Pasha, за что ему спасибо, нужно просто поставить правильный RichTextBox, и всё будет прекрасно работать.

Ну а теперь к новым вопросам, они будут касаться Windows.Controls.RichEditBox'а (WPF'овского):
1. Как узнать, какая часть текста выделена, применительно к структуре документа (чтобы знать, какие конкретно объекты затронуты, а не просто выделенную строку текста).
2. Как вставлять рисунки? В принципе, можно ручками, имея ответ на первый вопрос. Но может есть более простой способ?
3. Как вставлять гиперссылки? Аналогичино со вторым вопросом, благо есть класс Hyperlink. Но как хотелось бы просто взять да и загиперлинкить выделенный текст одной функцией, не ковыряясь в бескрайних просторах документа!
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!