RichTextBox Newline Conversion?

前端 未结 2 639
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-03 11:27

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 hav

2条回答
  •  执笔经年
    2020-12-03 12:05

    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:

    preinit  rtb.Rtf : ''
    postinit rtb.Rtf : '"{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Microsoft Sans Serif;}}\r\n\\viewkind4\\uc1\\pard\\f0\\fs17\\par\r\n}\r\n"'
    richTextBox1.Rtf : '"{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Microsoft Sans Serif;}}\r\n\\viewkind4\\uc1\\pard\\f0\\fs17\\par\r\n}\r\n"'
    richtextBox1.Rtf with cheese : '"{\\rtf1\\ansi\\deff0{\\fonttbl{\\f0\\fnil\\fcharset0 Microsoft Sans Serif;}}\r\n\\viewkind4\\uc1\\pard\\lang1033\\f0\\fs17 Cheese\\par\r\nWhiz\\par\r\n}\r\n"'
    

    Code:

    void Form1_Load(object sender, EventArgs e)
    {
        TestIt();
    }
    public void TestIt()
    {
        string enl = "Cheese" + Environment.NewLine + "Whiz";
    
        RichTextBox rtb = new RichTextBox();
        MessageBox.Show("preinit rtb.Rtf : '" + rtb.Rtf + "'");
        this.Controls.Add(rtb);
        MessageBox.Show("postinit rtb.Rtf : '" + rtb.Rtf + "'");
        MessageBox.Show("richTextBox1.Rtf : '" + richTextBox1.Rtf + "'");
    
        rtb.Text = enl;
        string ncr = rtb.Text;
        MessageBox.Show(string.Format("rtb: {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\nWhiz
        ---
        False
        True
        False
        */
        richTextBox1.Text = enl;
        MessageBox.Show("richTextBox1.Rtf with cheese : '" + richTextBox1.Rtf + "'");
        string ncr2 = richTextBox1.Text;
        MessageBox.Show(string.Format("richTextBox1: {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
        */
    }
    

提交回复
热议问题