- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 WinForms RichTextBox。看起来当 RichTextBox 在窗体上时,\r\n
被转换为 \n
。这是一个测试:
我有两个富文本框。一个是richTextBox1
,放在窗体上:
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 = "";
另一个是rtb
,是我现场制作的。当我运行此代码时(在表单的加载事件中):
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
*/
RichTextBox 似乎表现出一些奇怪的行为。当我将包含 \r\n
的文本放入我刚刚创建的框中时,它保持不变(仍然包含 \r\n
)。但是,当我将包含 \r\n
的文本放入表单的框中时,\r\n
会变成 \n
.
我的问题:这种行为是否有原因 (\r\n
->\n
)?这种行为是否记录在某处?我能指望它一直这样吗?
我在这里发布的案例是我试图弄清我在另一个项目中使用我的一个表单所遇到的问题的根源,因此我将不胜感激任何有关此问题的意见。
最佳答案
RichTextBox.Text属性正在根据 RichTextBox.Rtf 中指定的 Rtf 格式代码将分配的字符串转换为 rtf 文档属性(property)。由于“rtb”实例未被初始化,“Rtf”格式代码为空,它只是回显您的输入。 “rtb”初始化后,它包含一个空的 rtf 文档(带有格式代码),这与“richTextBox1”的行为相同(且正确)。
结果:
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"'
代码:
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
*/
}
关于c# - RichTextBox换行转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7067899/
在 Vaadin 7.0,显示时JavaBean Table 中的数据与 BeanContainer ,用新数据刷新表的正确方法是什么? 最佳答案 该表通过监听器监视表项的属性。如果您通过表的 Ite
首先,我使用的是带有 Axis2 1.6.2 的 eclipse,我正在 tomcat 6 上部署我创建的 Web 服务。Web 服务是在 eclipse 中通过自上而下的方法创建的。 我被要求使对我
我已将 Rails 3.1.1 应用程序升级到 Rails 3.1.3,现在,对于每个请求,它仅响应错误数量的参数(3 for 1)。不幸的是,它没有说明错误在哪里,并且应用程序跟踪为空。我认为存在一
我是一名优秀的程序员,十分优秀!