winform 中 TextBox 的 Multiline属性设置为 true ,敲入几个字符和几个回车,然后保存到数据库,再从数据库中读取出来赋值给TextBox,换行符丢失。以前遇到这问题,没太在意,只是将读取出的字符串中的”\n”替换为”\r\n”解决问题。
今天又遇到这个问题,简单试验了一下找出了其中的原因。
· TextBox 中换行符为: “\r\n”。
· Windows 中的换行符(即:Environment.NewLine) 为 “\r\n”
· MessageBox.Show() 的换行符为 “\n”
· Console 的换行符为 “\n”
从数据库中读取出来后,换行符不知为啥变成 “\n”,”\r” 莫名的丢失了。为正确显示格式要将 “\n” 替换为 “\r\n”
换行符还因平台而已,Unix/Linux 平台换行符是 “\n”。
为保持平台的通用性,最好用 Environment.NewLine。它可以确保在不同的平台下都能够返回正确的换行字符,在Windows下是\r\n,在Linux(Mono)下就应该是\n了。所以上面的代码应该写成:
aTextBox.Text = “First Line” +
Environment.NewLine + “Second Line” +
Environment.NewLine + “Third Line”;
另外你也可以用verbatim string literal(用@开始的字符串)的形式来输入换行符:
aTextBox.Text = @”First Line
Second Line
Third Line”;
2、如何在多行TextBox中用滚动条,使添加文本后自动滚动显示到最后一行?
方法是使用ScrollToCaret方法,自动滚动到插入符的位置,如:
textBox.AppendText(Label); // 追加文本,并且使得光标定位到插入地方。
textBox.ScrollToCaret();
this.textBox.Focus();//获取焦点
this.textBox.Select(this.textBox.TextLength,0);//光标定位到文本最后
this.textBox.ScrollToCaret();//滚动到光标处