it-swarm.com.de

Wie füge ich einer mehrzeiligen TextBox eine Zeile hinzu?

Wie kann ich einer mehrzeiligenTextBox eine Textzeile hinzufügen?

z.B. Pseudocode;

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

oder

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

Die einzigen Methoden, die TextBox.Lines implementiert (die ich sehen kann) sind:

  • Klon
  • Kopieren nach
  • Gleich
  • GetType
  • GetHashCode
  • GetEnumerator
  • Initialisieren
  • GetLowerBound
  • GetUpperBound
  • GetLength
  • GetLongLength
  • Wert erhalten
  • SetValue
  • ToString

enter image description here

49
Ian Boyd

@ Casperah wies darauf hin, dass ich falsch darüber nachdenke. Ein TextBox hat keine Zeilen, es hat Text. Dieser Text kann auf Anfrage auf der CRLF in Zeilen aufgeteilt werden - es gibt jedoch keinen Zeilenbegriff.

Die Frage ist dann, wie man erreicht, was ich will, anstatt was WinForms mich lässt.

Andere gegebene Varianten haben einen subtilen Fehler:

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

Sie fügen entweder eine neue Zeile an oder stellen sie voran, wenn eine (möglicherweise) nicht erforderlich ist.

Also, Erweiterungshilfe:

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

Also jetzt:

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

und

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

Anmerkung: Jeder Code wird als gemeinfrei veröffentlicht. Keine Zuordnung erforderlich.

97
Ian Boyd

Ich würde mit dem System.Environment.NewLine oder einer StringBuilder gehen

Dann könnten Sie Zeilen mit einem String-Builder wie folgt hinzufügen: 

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

textbox1.Text += sb.ToString();

oder NewLine wie folgt:

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

Besser:

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

textbox1.Text = sb.ToString();
19
Matt

Hängen Sie einen \r\n an den String, um den Text in eine neue Zeile zu setzen.

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

Dadurch werden die beiden Einträge in separaten Zeilen angezeigt.

14
DJ Quimby

Versuche dies

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

du kannst es auch versuchen 

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

Wo \r Wagenrücklauf und \n eine neue Zeile ist

5
Vamsi

Sie müssen die AppendText-Methode des Textfelds direkt verwenden. Wenn Sie versuchen, die Text-Eigenschaft zu verwenden, wird das Textfeld nicht nach unten verschoben, wenn eine neue Zeile angehängt wird.

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

Die "Lines" -Eigenschaft einer TextBox ist ein String-Array. Definitionsgemäß können Sie einem vorhandenen string[] keine Elemente hinzufügen wie einem List<string>. Dafür gibt es einfach keine Methode. Sie müssen stattdessen einen neuen string[] basierend auf der aktuellen Zeilenreferenz erstellen und diesen Zeilen zuweisen. 

Verwenden Sie ein wenig Linq (.NET 3.5 oder höher):

textBox1.Lines = textBox.Lines.Concat(new[]{"Some Text"}).ToArray();

Dieser Code eignet sich gut zum Hinzufügen einer neuen Zeile auf der Basis der Benutzerinteraktion. Wenn Sie jedoch ein Textfeld mit ein paar Dutzend neuer Zeilen initialisieren, wird es sehr schlecht funktionieren. Wenn Sie den Anfangswert einer TextBox festlegen, würde ich entweder die Text-Eigenschaft direkt mit einem StringBuilder festlegen (wie in den anderen Antworten erwähnt), oder wenn Sie die Lines-Eigenschaft bearbeiten möchten, verwenden Sie eine Liste, um die Auflistung zu kompilieren von Werten und konvertieren Sie es in ein Array, das Sie Zeilen zuweisen können:

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

Da das Lines-Array eine berechnete Eigenschaft ist, führt dies auch im Hintergrund zu einer unnötigen Konvertierung.

3
KeithS

Das Hinzufügen von Environment.NewLine oder \r\n funktionierte für mich zunächst nicht mit meinem Textfeld. Ich stellte fest, dass ich vergessen hatte, in die Behavior -Eigenschaften von Textbox zu gehen und die " Multiline " - Eigenschaft auf " True " zu setzen, um die Zeilen hinzuzufügen! Ich dachte nur, ich würde diese Einschränkung hinzufügen, da in den Antworten oben niemand anders war, und ich hatte gedacht, die Box würde sich automatisch erweitern, und vergaß, dass ich die Mulitline-Eigenschaft wirklich einstellen musste, damit sie funktioniert. Ich weiß, es ist eine Art Dummkopfsache (was uns spät an einem Freitagnachmittag passiert), aber es kann jemandem helfen, sich daran zu erinnern, das zu überprüfen. Im Abschnitt "Darstellung" befindet sich auch die "ScrollBars" -Eigenschaft, die ich auf "Beide" setzen musste, um sowohl horizontale als auch vertikale Balken zu erhalten, so dass der Text tatsächlich gescrollt und vollständig angezeigt werden konnte. Die Antwort hier ist also nicht einfach nur ein Code, indem Sie Environment.NewLine oder \r\n an .Text anhängen, sondern auch sicherstellen, dass Ihre Box mit den richtigen Eigenschaften richtig eingerichtet ist.

1
vapcguy

Fügen Sie einfach einen Zeilenumbruch in Ihren Text ein.

Sie fügen keine Zeilen als Methode hinzu. Multiline unterstützt nur die Verwendung von Zeilenumbrüchen.

0
nycdan

Obige Methoden haben bei mir nicht funktioniert. Ich habe folgende Ausnahme bekommen:

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

Es stellte sich heraus, dass ich zuerst Invoke auf meinen Steuerelementen aufrufen musste. Siehe Antwort hier .

0
Roald

Wenn Sie wissen, wie viele Zeilen Sie benötigen, erstellen Sie ein String-Array mit so vielen Elementen (z. B. myStringArray) ..__ Verwenden Sie dann myListBox.Lines = myStringArray;

0
Kay Superstar