如何向multi-line TextBox
添加一行文字?
e.g。伪代码;
textBox1.Clear();
textBox1.Lines.Add("1000+");
textBox1.Lines.Add("750-999");
textBox1.Lines.Add("400-749");
...snip...
textBox1.Lines.Add("40-59");
或
textBox1.Lines.Append("brown");
textBox1.Lines.Append("brwn");
textBox1.Lines.Append("brn");
textBox1.Lines.Append("brow");
textBox1.Lines.Append("br");
textBox1.Lines.Append("brw");
textBox1.Lines.Append("brwm");
textBox1.Lines.Append("bron");
textBox1.Lines.Append("bwn");
textBox1.Lines.Append("brnw");
textBox1.Lines.Append("bren");
textBox1.Lines.Append("broe");
textBox1.Lines.Append("bewn");
TextBox.Lines实现的唯一方法(我可以看到)是:
答案 0 :(得分:98)
TextBox
没有行,它有文字。如果要求,该文本可以在CRLF上分割成行 - 但是没有行的概念。
接下来的问题是如何实现我想要的,而不是WinForms给我的东西。
其他给定的变体有一个微妙的错误:
textBox1.AppendText("Hello" + Environment.NewLine);
textBox1.AppendText("Hello" + "\r\n");
textBox1.Text += "Hello\r\n"
textbox1.Text += System.Environment.NewLine + "brown";
当一个(可能)不需要换行符时,它们会追加或添加换行符。
所以,扩展助手:
public static class WinFormsExtensions
{
public static void AppendLine(this TextBox source, string value)
{
if (source.Text.Length==0)
source.Text = value;
else
source.AppendText("\r\n"+value);
}
}
现在:
textBox1.Clear();
textBox1.AppendLine("red");
textBox1.AppendLine("green");
textBox1.AppendLine("blue");
和
textBox1.AppendLine(String.Format("Processing file {0}", filename));
注意:任何代码都会发布到公共域中。无需归属。
答案 1 :(得分:19)
我会选择System.Environment.NewLine
或StringBuilder
然后你可以用这样的字符串生成器添加行:
StringBuilder sb = new StringBuilder();
sb.AppendLine("brown");
sb.AppendLine("brwn");
textbox1.Text += sb.ToString();
像这样的或NewLine:
textbox1.Text += System.Environment.NewLine + "brown";
更好:
StringBuilder sb = new StringBuilder(textbox1.Text);
sb.AppendLine("brown");
sb.AppendLine("brwn");
textbox1.Text = sb.ToString();
答案 2 :(得分:14)
在字符串中附加\r\n
以将文字放在新行上。
textBox1.Text += ("brown\r\n");
textBox1.Text += ("brwn");
这将在不同的行上生成两个条目。
答案 3 :(得分:5)
试试这个
textBox1.Text += "SomeText\r\n"
您也可以尝试
textBox1.Text += "SomeText" + Environment.NewLine;
其中\r
是回车,\n
是新行
答案 4 :(得分:3)
您必须直接使用文本框的AppendText
方法。如果您尝试使用Text
属性,则在添加新行时文本框不会向下滚动。
textBox1.AppendText("Hello" + Environment.NewLine);
答案 5 :(得分:3)
TextBox的“Lines”属性是一个字符串数组。根据定义,您无法向现有string[]
添加元素,就像List<string>
一样。根本没有可用的方法。您必须根据当前的Line引用创建一个新的string[]
,并将其分配给Lines。
使用一点Linq(.NET 3.5或更高版本):
textBox1.Lines = textBox.Lines.Concat(new[]{"Some Text"}).ToArray();
此代码适用于基于用户交互一次添加一行新行,但是对于使用几十个新行初始化文本框,它将执行得非常糟糕。如果您正在设置TextBox的初始值,我将使用StringBuilder直接设置Text属性(如其他答案所述),或者如果您设置操作Lines属性,则使用List编译集合的值,然后将其转换为数组以分配给行:
var myLines = new List<string>();
myLines.Add("brown");
myLines.Add("brwn");
myLines.Add("brn");
myLines.Add("brow");
myLines.Add("br");
myLines.Add("brw");
...
textBox1.Lines = myLines.ToArray();
即便如此,因为Lines数组是一个计算属性,这涉及幕后的大量不必要的转换。
答案 6 :(得分:1)
最初,使用我的文本框添加Environment.NewLine
或\r\n
对我不起作用。我发现我忘记进入文本框的行为属性并设置&#34; 多行&#34;财产到&#34; 真实&#34;为它添加线条!我只是想我添加这个警告,因为上面的答案中没有其他人做过,而且我认为盒子只是自动扩展而忘记我需要实际设置Mulitline属性才能工作。我知道它是一种傻瓜的东西(这是我们在星期五下午晚些时候发生的那种事情),但它可能有助于某人记得检查。此外,在外观部分是&#34; ScrollBars&#34;我需要设置为&#34; Both&#34;,以获得水平和垂直条形的属性,以便文本实际上可以滚动并完整地看到。因此,通过将Environment.NewLine
或\r\n
附加到.Text
,此处的答案不仅仅是代码一,而且还要确保使用正确的属性正确设置您的框。< / p>
答案 7 :(得分:0)
只需在文字中添加换行符。
您不会将行添加为方法。 Multiline只支持使用换行符。
答案 8 :(得分:0)
如果您知道需要多少行,请创建一个包含许多成员的String数组(例如myStringArray)。 然后使用myListBox.Lines = myStringArray;
答案 9 :(得分:0)
以上方法对我不起作用。我得到以下例外:
Exception : 'System.InvalidOperationException' in System.Windows.Forms.dll
原来我需要首先在控件上调用Invoke
。请参阅答案here。