RichTextBox换行转换?我正在使用WinFormsRichTextBox。当RichTextBox在表单上时,看起来rn被转换为n。这是一个测试:我有两个富文本框。一个是richTextBox1,放在窗体上:this.richTextBox1=newSystem.Windows.Forms.RichTextBox();这个.SuspendLayout();////richTextBox1//this.richTextBox1.Location=newSystem.Drawing.Point(37,12);this.richTextBox1.Name="richTextBox1";this.richTextBox1.Size=newSystem.Drawing.Size(100,96);this.richTextBox1.TabIndex=0;this.richTextBox1.Text="";另一个是rtb,我当场创建的。当我运行此代码时(在窗体的加载事件中):varrtb=newRichTextBox();stringenl="Cheese"+Environment.NewLine+"Whiz";rtb.Text=enl;stringncr=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)));/*CheesernWhizCheesernWhiz---TrueTrueTrue*/richTextBox1.Text=enl;stringncr2=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)));/*奶酪WhizCheesenWhiz---FalseTrueFalse*/RichTextBox似乎表现出一些奇怪的行为当我将包含rn的文本放入我刚刚创建的框中时,它保持不变(仍然包含rn)。但是,当我把包含rn的文字放到表格的方框中时,rn就变成了n。我的问题:这种行为是否有原因(rn->n)?这种行为是否记录在某处?我可以一直指望它吗?我在这里发布的案例是我试图了解我在其他项目中使用其中一种表格时遇到的问题的底线,因此我将不胜感激对此问题的任何意见。RichTextBox.Text属性根据RichTextBox.Rtf属性中指定的Rtf格式代码将指定的字符串转换为rtf文档。由于“rtb”实例未初始化,“Rtf”格式代码为空,它只是回应您的输入。初始化“rtb”后,它包含一个空的rtf文档(带有格式代码),其行为与“richTextBox1”相同(并且正确)。结果:preinitrtb.Rtf:''postinitrtb.Rtf:'"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0MicrosoftSansSerif;}}rn\viewkind4\uc1\pard\f0\fs17\parrn}rn"'richTextBox1.Rtf:'"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0MicrosoftSansSerif;}}rn\viewkind4\uc1\pard\f0\fs17\parrn}rn"'richtextBox1.Rtfwithcheese:'"{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0MicrosoftSansSerif;}}rn\viewkind4\uc1\pard\lang1033\f0\fs17Cheese\parrnWhiz\parrn}rn"'代码:voidForm1_Load(objectsender,EventArgse){TestIt();}publicvoidTestIt(){stringenl="Cheese"+Environment.NewLine+"Whiz";RichTextBoxrtb=newRichTextBox();MessageBox.Show("预初始化rtb.Rtf:'"+rtb.Rtf+"'");this.Controls.Add(rtb);MessageBox.Show("postinitrtb.Rtf:'"+rtb.Rtf+"'");MessageBox.Show("richTextBox1.Rtf:'"+richTextBox1.Rtf+"'");rtb.Text=enl;stringncr=rtb.Text;MessageBox.Show(string.Format("rtb:{0}{1}{2}{3}---{4}{5}{6}{7}{8}{9}",enl.Replace("n","\n")。替换(“r”,“\r”),Environment.NewLine,ncr.Replace(“n”,“\n”)。替换(“r”,“\r”),Environment.NewLine,Environment.NewLine,(enl==ncr),Environment.NewLine,enl.Contains(Environment.NewLine),Environment.NewLine,ncr.Contains(Environment.NewLine)));/*CheesernWhizCheesenWhiz---假真假*/richTextBox1.Text=enl;MessageBox.Show("richTextBox1.Rtfwithcheese:'"+richTextBox1.Rtf+"'");stringncr2=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"),环境.NewLine,Environment.NewLine,(enl==ncr2),Environment.NewLine,enl.Contains(Environment.NewLine),Environment.NewLine,ncr2.Contains(Environment.NewLine)));/*CheesernWhizCheesenWhiz---FalseTrueFalse*/}varrtb=newRichTextBox();字符串英文="奶酪"+Environment.NewLine+"Whiz";rtb.Text=enl;这是Text属性工作方式的副作用。它缓存在Control.Text中,实际的本机Windows控件在创建之前不会更新。问题是,您的rtb永远不会发生这种情况。您没有将它添加到表单中,因此未创建本机控件。.NET中典型的惰性资源分配模式。所以你正在读取缓存的值,而不是控件中的值。要看到这一点,请修改代码以强制创建控件:varrtb=newRichTextBox();rtb.CreateControl();stringenl="Cheese"+Environment.NewLine+"Whiz";rtb.Text=enl;你会看到rn现在被翻译成n。不要忘记Dispose()控件。以上就是C#学习教程:RichTextBox换行转换?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
