Лучший способ манипулирования RichText в C #? - PullRequest
5 голосов
/ 26 сентября 2008

Мне нужно создать и скопировать в буфер обмена какой-нибудь 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;

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

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

Ответы [ 6 ]

3 голосов
/ 05 июня 2009

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

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

3 голосов
/ 26 сентября 2008

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

3 голосов
/ 26 сентября 2008

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

2 голосов
/ 26 сентября 2008

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

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 пути.

1 голос
/ 06 ноября 2014

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

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

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

0 голосов
/ 05 сентября 2011

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

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

...