tags:

views:

1957

answers:

4

I need to create and copy to the clipboard some RichText with standard "formatting" like bold/italics, indents and the like. The way I'm doing it now seems kind of inelegant... I'm creating a RichTextBox item and applying my formatting through that like so:

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;

There has got to be a better way, but after a few hours of searching I was unable to come up with anything better. Any ideas?

Edit: The RichTextBox (rtb) is not displayed/drawn anywhere on a form. I'm just using the object to format my RichText.

+2  A: 

You may want to suspend the layout of the richtextbox before you do all of that, to avoid unecessary flicker. That's one of the common mistakes I used to make which made it seem "inelegant"

hova
Well that's the thing; The RichTextBox isn't even *displayed* anywhere...I'm just using it because I couldn't find an equally facile way to manipulate/format RichText. Thanks for your suggestion.
BKimmel
Well, I suppose you could create a whole class structure and methods and whatnot for directly manipulating rich text, and then you could post that code online so others could use it. A google search for rich text libraries turns up nothing?
hova
+2  A: 

You could create some utility extension methods to make it more 'elegant' :)

   public static void Set(this RichTextBox rtb, Font font, string text)
  {

         rtb.Text = text;
   rtb.SelectAll();
         rtb.SelectionFont = font;
             rtb.SelectionIndent = 12;
                 return rtb;

  }

And call like this:

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

Edit: I see now that you are not even displaying it. Hrm, interesting, sorry i wasnt of much help with providing a Non Rtb way.

mattlant
This is good but should be coupled with the @hova's suggestion to suspend redrawing while it's happening.
Frank Krueger
+3  A: 

I think your technique is a great way to accomplish what you're looking to do. I know what you mean...it feels kind of "dirty" because you're using a Winforms control for something other than it was intended for, but it just works. I've used this technique for years. Interested to see if anyone else has viable options.

jwalkerjr
Agreed. It's no different from creating a WebBrowser control just to parse a page and get the text out or something, which I've done before. Nothing wrong with using tools for new purposes.
Kyralessa
Ya, that's exactly what I'm trying to say...it just feels wrong...If there is no equally facile way to go about it I am fine...I would much rather do this than mess around trying to format strings into RTF manually...I just thought there must be something out there that I'm missing.
BKimmel
A: 

Is this project helpful?

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

John JJ Curtis