I’m using a WinForms RichTextBox. It appears that when the RichTextBox is on a form, \r\n gets converted to \n. Here’s a test:
I have two rich text boxes. One is richTextBox1, which is placed on the form:
this.richTextBox1 = new System.Windows.Forms.RichTextBox();
this.SuspendLayout();
//
// richTextBox1
//
this.richTextBox1.Location = new System.Drawing.Point(37, 12);
this.richTextBox1.Name = "richTextBox1";
this.richTextBox1.Size = new System.Drawing.Size(100, 96);
this.richTextBox1.TabIndex = 0;
this.richTextBox1.Text = "";
The other is rtb, which I create on the spot. When I run this code (in the form’s load event):
var rtb = new RichTextBox();
string enl = "Cheese" + Environment.NewLine + "Whiz";
rtb.Text = enl;
string ncr = rtb.Text;
MessageBox.Show(string.Format("{0}{1}{2}{3}---{4}{5}{6}{7}{8}{9}",
enl.Replace("\n", "\\n").Replace("\r", "\\r"), Environment.NewLine,
ncr.Replace("\n", "\\n").Replace("\r", "\\r"), Environment.NewLine,
Environment.NewLine,
(enl == ncr), Environment.NewLine,
enl.Contains(Environment.NewLine), Environment.NewLine,
ncr.Contains(Environment.NewLine)));
/*
Cheese\r\nWhiz
Cheese\r\nWhiz
---
True
True
True
*/
richTextBox1.Text = enl;
string ncr2 = richTextBox1.Text;
MessageBox.Show(string.Format("{0}{1}{2}{3}---{4}{5}{6}{7}{8}{9}",
enl.Replace("\n", "\\n").Replace("\r", "\\r"), Environment.NewLine,
ncr2.Replace("\n", "\\n").Replace("\r", "\\r"), Environment.NewLine,
Environment.NewLine,
(enl == ncr2), Environment.NewLine,
enl.Contains(Environment.NewLine), Environment.NewLine,
ncr2.Contains(Environment.NewLine)));
/*
Cheese\r\nWhiz
Cheese\nWhiz
---
False
True
False
*/
The RichTextBox seems to be exhibiting some strange behavior. When I put text containing a \r\n into the box I just created, it stays the same (still contains the \r\n). However, when I put text containing an \r\n into the box on the form, the \r\n gets turned into \n.
My Questions: Is there a reason for this behavior (\r\n->\n)? Is this behavior documented somewhere? Can I count on it always being this way?
The case I posted here is my attempt at getting to the bottom of a problem I’ve been having with one of my forms in a different project, so I’d appreciate any input regarding this issue.
The RichTextBox.Text property is converting the assigned string into an rtf document according to the Rtf format codes specified in the RichTextBox.Rtf property. Since the ‘rtb’ instance is not being initialized the ‘Rtf’ format codes are empty, and it’s just echoing back your input. After ‘rtb’ is initialized it contains an empty rtf document (with format codes), which is the same (and correct) behavior as ‘richTextBox1’.
Results:
Code: