Лучший способ манипулирования RichText в C #?

Мне нужно создать и скопировать в буфер обмена некоторый RichText со стандартным «форматированием», например, жирным шрифтом / курсивом, отступами и т.п. То, как я это делаю сейчас, кажется неэлегантным ... Я создаю элемент RichTextBox и применяю свое форматирование таким образом:

RichTextBox rtb = new RichTextBox();
Font boldfont = new Font("Times New Roman", 10, FontStyle.Bold);
rtb.Text = "sometext";
rtb.SelectAll()
rtb.SelectionFont = boldfont;
rtb.SelectionIndent = 12;

Должен быть способ получше, но после нескольких часов поисков я не смог придумать ничего лучшего. Любые идеи?

Изменить: RichTextBox (rtb) не отображается / не отображается в любом месте формы. Я просто использую объект для форматирования своего RichText.


person BKimmel    schedule 25.09.2008    source источник


Ответы (6)


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

person hova    schedule 25.09.2008
comment
Ну вот в чем дело; RichTextBox даже нигде не отображается ... Я просто использую его, потому что не смог найти столь же простой способ манипулировать / форматировать RichText. Спасибо за ваше предложение. - person BKimmel; 26.09.2008
comment
Что ж, я полагаю, вы могли бы создать целую структуру классов и методы и еще много чего для прямого управления форматированным текстом, а затем вы могли бы опубликовать этот код в Интернете, чтобы другие могли его использовать. Поиск в Google библиотек форматированного текста ничего не дает? - person hova; 26.09.2008

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

person jwalkerjr    schedule 25.09.2008
comment
Согласованный. Это ничем не отличается от создания элемента управления WebBrowser только для анализа страницы и вывода текста или чего-то подобного, что я делал раньше. Нет ничего плохого в использовании инструментов для новых целей. - person Ryan Lundy; 26.09.2008
comment
Да, это именно то, что я пытаюсь сказать ... это просто неправильно ... Если нет столь же легкого способа сделать это, я в порядке ... Я бы лучше сделал это, чем возился, пытаясь отформатировать строки в RTF вручную ... Я просто подумал, что должно быть что-то, чего мне не хватает. - person BKimmel; 26.09.2008

Этот проект полезен?

http://www.codeproject.com/KB/string/nrtftree.aspx

person jjxtra    schedule 05.06.2009
comment
Спасибо! Для меня это полезно - person Anton Semenov; 22.03.2011

Вы можете создать несколько методов расширения служебной программы, чтобы сделать ее более «элегантной» :)

public static RichTextBox Set(this RichTextBox rtb, Font font, string text)
{               
    rtb.Text = text;
    rtb.SelectAll();
    rtb.SelectionFont = font;
    rtb.SelectionIndent = 12;
    return rtb;
}

И позвонить так:

someRtb.Set(yourFont, "The Text").AndThenYouCanAddMoreAndCHainThem();

Изменить: теперь я вижу, что вы его даже не показываете. Хм, интересно, извините, я не сильно помог с предоставлением способа Non Rtb.

person mattlant    schedule 25.09.2008
comment
Это хорошо, но должно сочетаться с предложением @hova приостановить перерисовку во время ее выполнения. - person Frank Krueger; 15.06.2009

Вы также должны приостановить макет richtextbox сразу после создания и удалить его после использования.

RichTextBox rtb = new RichTextBox();
rtb.SuspendLayout();
//richtext processing goes here...
rtb.Dispose();

И не стесняйтесь использовать richtextbox для обработки richtext. Сама Microsoft делает это здесь, в этом руководстве. :-)

person ePandit    schedule 05.11.2014

Я знаю, что это было давно, но посмотрите этот пост stackoverflow о преобразовании rtf в html. Вероятно, было бы проще перенести ваш материал в html, манипулировать им, а затем либо отобразить его с помощью html, либо преобразовать обратно в rtf.

Конвертировать Rtf в HTML

person jjxtra    schedule 05.09.2011