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

Тема в разделе ".NET", создана пользователем iv4258, 14 апр 2008.

Статус темы:
Закрыта.
  1. iv4258

    iv4258 Гость

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

    iv4258 Гость

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

    iceheart Гость

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

    И ещё. В документации есть интересный раздел про команды. Дескать, всё что нужно, это написать EditingCommands.ToggleBold и программа всё сделает сама. Но ни ApplicationCommands, ни EditingCommands студия при компиляции не распознаёт, да и обещанного свойства Command у кнопочек на панели инструментов нету. Под MSDN2008 статья находится в ms-help://MS.MSDNQTR.v90.en/wpf_conceptual/html/bc208dfe-367d-426a-99de-52b7e7511e81.htm,
    Может я чего-то путаю?
     
  4. iceheart

    iceheart Гость

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

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

Поделиться этой страницей