2011-12-16 41 views
44

如何添加一行文字到multi-lineTextBox如何将一行添加到多行文本框?

例如伪代码;

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从
  • 的Equals
  • 的GetType
  • 的GetHashCode
  • 的GetEnumerator
  • 初始化
  • GetLowerBound
  • GetUpperBound
  • GetLength进行
  • GetLongLength
  • 的GetValue
  • 的SetValue
  • 的ToString

enter image description here

+1

你不能使用append(Enviroment.NewLine)吗? – jclozano 2011-12-16 16:19:22

+1

TextBox.Lines是文本的只读表示。请参阅http://msdn.microsoft.com/en-us/library/system.windows.forms.textboxbase.lines.aspx。 – Casperah 2011-12-16 16:21:30

+0

@Casperah Ohhh,这有助于解释为什么它不能用来做我想做的事情 - 微软(以一种不太微妙的方式)阻止你做一个较慢的代码路径 – 2011-12-16 16:54:32

回答

90

@Casperah指出我在想它是错的。 A 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)); 

注意:任何代码发布到公共领域。无需归属。

13

附加一个\r\n字符串把文本在新的一行。

textBox1.Text += ("brown\r\n"); 
textBox1.Text += ("brwn"); 

这将在不同的行上产生两个条目。

0

只需在您的文本中插入一个换行符。

您不添加行作为方法。 Multiline仅支持使用换行符。

15

我将与System.Environment.NewLineStringBuilder

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

StringBuilder sb = new StringBuilder(); 
sb.AppendLine("brown"); 
sb.AppendLine("brwn"); 

textbox1.Text += sb.ToString(); 

或换行是这样的:

textbox1.Text += System.Environment.NewLine + "brown"; 
5

试试这个

textBox1.Text += "SomeText\r\n" 

你也可以尝试

textBox1.Text += "SomeText" + Environment.NewLine; 

哪里\r是回车和\n是新线

3

你必须直接使用文本框的AppendText方法。如果您尝试使用Text属性,则文本框不会随着新行的添加而向下滚动。

textBox1.AppendText("Hello" + Environment.NewLine); 
3

TextBox的“Lines”属性是一个字符串数组。根据定义,您不能将元素添加到现有的string[],就像您可以将其添加到List<string>一样。目的根本没有可用的方法。您必须根据当前行参考创建一个新的string[],并将其分配给行。

使用小的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(); 

即使是这样,由于线阵列是计算属性,这涉及大量的幕后不必要的转换的。

0

如果您知道需要多少行,请使用该许多成员(例如myStringArray)创建一个String数组。 然后使用myListBox。Lines = myStringArray;

1

Environment.NewLine\r\n的加入对我来说并不适用,最初是用我的文本框。我发现我忘记进入文本框的行为属性,并将“Multiline”属性设置为“True”,以便添加行!我只是认为我会补充这个警告,因为没有人在上面的答案中做过,我曾经认为这个盒子会自动扩展,并且忘记了我需要实际设置Mulitline属性才能工作。我知道这是某种头脑的东西(这是在星期五下午晚些时候发生在我们身上的那种事),但它可能会帮助别人记得检查它。另外,在外观部分中,我需要将“ScrollBars”属性设置为“Both”,以便同时获得水平和垂直条,以便文本可以实际滚动并全部看到。因此,这里的答案不仅仅是通过在.Text上附加Environment.NewLine\r\n的代码,而且还要确保您的盒子已正确设置并具有正确的属性。

0

以上方法对我不起作用。我有以下异常:

Exception : 'System.InvalidOperationException' in System.Windows.Forms.dll 

原来我需要先请我的控制Invoke。见答案here

相关问题