How to add a line to a multiline TextBox?

Ian Boyd picture Ian Boyd · Dec 16, 2011 · Viewed 273.4k times · Source

How can i add a line of text to a multi-line TextBox?

e.g. pseudocode;

textBox1.Clear();
textBox1.Lines.Add("1000+");
textBox1.Lines.Add("750-999");
textBox1.Lines.Add("400-749");
...snip...
textBox1.Lines.Add("40-59");

or

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");

The only methods that TextBox.Lines implements (that i can see) are:

  • Clone
  • CopyTo
  • Equals
  • GetType
  • GetHashCode
  • GetEnumerator
  • Initialize
  • GetLowerBound
  • GetUpperBound
  • GetLength
  • GetLongLength
  • GetValue
  • SetValue
  • ToString

enter image description here

Answer

Ian Boyd picture Ian Boyd · Dec 16, 2011

@Casperah pointed out that i'm thinking about it wrong. A TextBox doesn't have lines, it has text. That text can be split on the CRLF into lines, if requested - but there is no notion of lines.

The question then is how to accomplish what i want, rather than what WinForms lets me.

Other given variants have a subtle bug:

  • textBox1.AppendText("Hello" + Environment.NewLine);
  • textBox1.AppendText("Hello" + "\r\n");
  • textBox1.Text += "Hello\r\n"
  • textbox1.Text += System.Environment.NewLine + "brown";

They either append or prepend a newline when one (might) not be required.

So, extension helper:

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);
   }
}

So now:

textBox1.Clear();
textBox1.AppendLine("red");
textBox1.AppendLine("green");
textBox1.AppendLine("blue");

and

textBox1.AppendLine(String.Format("Processing file {0}", filename));

Note: Any code is released into the public domain. No attribution required.