Как добавить строку в многострочный TextBox?
Как добавить строку текста в multi-line TextBox
?
например. псевдокод;
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 реализует (что я вижу):
- Clone
- CopyTo
- Равно
- GetType
- GetHashCode
- GetEnumerator
- Initialize
- GetLowerBound
- GetUpperBound
- GetLength
- GetLongLength
- GetValue
- SetValue
- ToString
![enter image description here]()
Ответы
Ответ 1
@Каспара указал, что я думаю об этом неправильно. 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));
Примечание. Любой код выпущен в общедоступном домене. Не требуется атрибуция.
Ответ 2
Добавьте строку \r\n
в строку, чтобы поместить текст в новую строку.
textBox1.Text += ("brown\r\n");
textBox1.Text += ("brwn");
Это приведет к созданию двух записей в отдельных строках.
Ответ 3
Я бы пошел с System.Environment.NewLine
или StringBuilder
Затем вы можете добавить строки с построителем строк следующим образом:
StringBuilder sb = new StringBuiler();
sb.AppendLine("brown");
sb.AppendLine("brwn");
textbox1.Text += sb.ToString();
или NewLine:
textbox1.Text += System.Environment.NewLine + "brown";
Ответ 4
Попробуйте это
textBox1.Text += "SomeText\r\n"
вы также можете попробовать
textBox1.Text += "SomeText" + Environment.NewLine;
Где \r
- возврат каретки, а \n
- новая строка
Ответ 5
Вы должны использовать метод AppendText
текстового поля напрямую. Если вы попытаетесь использовать свойство Text
, текстовое поле не будет прокручиваться по мере добавления новой строки.
textBox1.AppendText("Hello" + Environment.NewLine);
Ответ 6
Свойство "Lines" для TextBox представляет собой массив строк. По определению вы не можете добавлять элементы в существующий string[]
, как вы можете, в List<string>
. Для этой цели нет никакого метода. Вместо этого вы должны создать новый string[]
на основе текущей ссылки Lines и присвоить его Lines.
Использование небольшого Linq (.NET 3.5 или новее):
textBox1.Lines = textBox.Lines.Concat(new[]{"Some Text"}).ToArray();
Этот код подходит для добавления одной новой строки за раз в зависимости от взаимодействия пользователя, но для инициализации текстового поля с несколькими десятками новых строк он будет работать очень плохо. Если вы устанавливаете начальное значение TextBox, я бы либо установил свойство Text напрямую, используя StringBuilder (как упомянули другие ответы), либо если вы настроены на управление свойством Lines, используйте List для компиляции коллекции и затем преобразовать его в массив, чтобы назначить Lines:
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 является вычисленным свойством, это включает в себя много ненужного преобразования за кулисами.
Ответ 7
Добавление Environment.NewLine
или \r\n
для меня не работало с моим текстовым полем. Я обнаружил, что забыл зайти в текстовое поле Поведение и установить для свойства Многострочное значение " True", чтобы он добавил строки! Я просто подумал, что добавлю это предостережение, так как в ответах выше ничего другого не было, и я подумал, что коробка просто собирается автоматически расширяться и забывать, что мне нужно было установить свойство Mulitline для его работы. Я знаю, это что-то вроде головной части (что происходит с нами поздно вечером в пятницу), но это может помочь кому-то запомнить проверить это. Кроме того, в разделе "Внешний вид" есть свойство "ScrollBars", которое мне нужно установить в "Both", чтобы получить как горизонтальные, так и вертикальные столбцы, чтобы текст действительно мог прокручиваться и отображаться целиком. Таким образом, ответ здесь не просто для кода, добавляя Environment.NewLine
или \r\n
к .Text
, но также убедитесь, что ваше поле правильно настроено с правильными свойствами.
Ответ 8
Просто поместите строку в свой текст.
Вы не добавляете строки как метод. Многострочный просто поддерживает использование разрывов строк.
Ответ 9
Если вы знаете, сколько строк вы хотите, создайте массив String с таким количеством членов (например, myStringArray).
Затем используйте myListBox.Lines = myStringArray;