This past week, I found a perfect excuse to introduce WPF into one of my clients' applications.
One of the forms of a WinForms app has a large multiline textbox for them to enter a report of a visit to a client site. A few weeks ago, I was asked to enable columnar data to be typed in there along with the text, free-form, as it were. No problem. The AcceptsTabs property did the trick.
A persistence anomaly with Tabs: There was only one SNAFU with this. When the data went to Crystal Reports, the columns weren't lined up as they were in the form. I experimented with this for a while, using monospaced fonts, trying to understand why tabs were disappearing, googling and combing through the Crystal Reports forms and KB, but alas, I could not solve the problem. Interestingly, it’s not CR that is the problem.
Here is some columnar data typed into a RichTextBox. (The effects are the same in a plain TextBox)

If I paste the tabbed text into Word, it looks fine.

But if I paste it into Excel, note where excel places the text.

And lastly, what it looks like in the report:

This happens even if I am using monospaced fonts. It is interpreting the tabs explicitly, rather than adjusting for the long text that reduces the number of following tabs necessary to align the next column. Crystal must be doing the same thing. Without a crazy amount of code, I can’t get around this one.
What about a RichTextBox? My next idea was a RichTextBox, something I haven't worked with a lot. By searching for RichTextBox and Table, I kept coming to WPF documentation. By inserting a FlowDocument into the RichTextBox, you can get columnar data. Finally my opportunity and excuse to do some production WPF!
Alas, no WPF for me this time. Yet, I had to consider the end users of this app. Even though it is deployed and updated via ClickOnce to make things as simple as possible, we have users that literally have brought their home computers into the office to have software installed from CD or even updated (file copy) before we had the ClickOnce solution. A quick review of this great article on deplying .NET 3.0 confirmed my fears. Not all of them are even on Windows XP. Sadly, it's not yet an option for this particular application which needs to be used outside of the office, in scenarios where we don't have as much control of the hardware.
So, in the end, the decision was to let the user create the columnar data in Excel and paste it into the RichTextBox. Although there are a lot of users of the app, there are only a handful that will need to do this, so for now, this is a totally acceptable solution as far as my client is concerned. It looks like if I dug into RTF formatting, I could insert tables in code, but icch (as well as the additional time & cost involved of implementing this). Crystal Reports has a formatting property for RTF.
There may be another way around this, and I'll probably look for a third party tool that will deal with the tabs better, but for now, we're happy and of course, I had fun poking around.