如何在多行TextBox中添加一行?

时间:2011-12-16 16:15:56

标签: c# winforms textbox

如何向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实现的唯一方法(我可以看到)是:

  • 克隆
  • CopyTo从
  • 等于
  • 的GetType
  • 的GetHashCode
  • 的GetEnumerator
  • 初始化
  • GetLowerBound
  • GetUpperBound
  • GetLength进行
  • GetLongLength
  • 的GetValue
  • 的SetValue
  • 的ToString

enter image description here

10 个答案:

答案 0 :(得分:98)

@Casperah指出我错了。 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.NewLineStringBuilder

然后你可以用这样的字符串生成器添加行:

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