web-dev-qa-db-fra.com

Comment ajouter une ligne à une TextBox multiligne?

Comment puis-je ajouter une ligne de texte à un multi-lineTextBox ?

par exemple. pseudocode;

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

ou

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

Les seules méthodes que TextBox.Lines implémente (que je peux voir) sont:

  • Cloner
  • Copier
  • Équivaut à
  • GetType
  • GetHashCode
  • GetEnumerator
  • Initialiser
  • GetLowerBound
  • GetUpperBound
  • GetLength
  • GetLongLength
  • GetValue
  • SetValue
  • ToString

enter image description here

49
Ian Boyd

@Casperah a fait remarquer que j'y pensais mal. Un TextBox n'a pas des lignes , il a texte. Ce texte peut être divisé sur le CRLF en lignes, si nécessaire - mais il n’ya pas de notion de lignes.

La question est alors de savoir comment accomplir ce que je veux, plutôt que ce que WinForms me permet.

D'autres variantes données ont un bogue subtil:

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

Ils ajoutent ou préfigurent une nouvelle ligne lorsque l’une (peut être) inutile.

Donc, assistant d'extension:

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

Alors maintenant:

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

et

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

Note: Tout code est publié dans le domaine public. Aucune attribution requise.

97
Ian Boyd

J'irais avec le System.Environment.NewLine ou un StringBuilder

Ensuite, vous pouvez ajouter des lignes avec un constructeur de chaînes comme ceci: 

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

textbox1.Text += sb.ToString();

ou NewLine comme ceci:

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

Meilleur:

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

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

Ajoutez un \r\n à la chaîne pour placer le texte sur une nouvelle ligne.

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

Cela produira les deux entrées sur des lignes séparées.

14
DJ Quimby

Essaye ça

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

tu peux aussi essayer 

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

\r est le retour à la ligne et \n est la nouvelle ligne

5
Vamsi

Vous devez utiliser directement la méthode AppendText de la zone de texte. Si vous essayez d'utiliser la propriété Text, la zone de texte ne défilera pas si la nouvelle ligne est ajoutée.

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

La propriété "Lignes" d'un TextBox est un tableau de chaînes. Par définition, vous ne pouvez pas ajouter d'éléments à un string[] existant, contrairement à un List<string>. Il n'y a tout simplement aucune méthode disponible à cette fin. Vous devez plutôt créer un nouveau string[] basé sur la référence de lignes actuelle et l'affecter à des lignes. 

En utilisant un peu Linq (.NET 3.5 ou ultérieur):

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

Ce code convient parfaitement pour ajouter une nouvelle ligne à la fois en fonction des interactions de l'utilisateur, mais pour initialiser une zone de texte contenant quelques dizaines de nouvelles lignes, sa performance sera très médiocre. Si vous définissez la valeur initiale d'une zone de texte, je définirais la propriété Text directement à l'aide d'un StringBuilder (comme d'autres réponses l'ont mentionné) ou, si vous souhaitez manipuler la propriété Lines, utilisez une liste pour compiler la collection de valeurs, puis convertissez-le en un tableau à affecter aux lignes:

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

Même dans ce cas, le tableau Lines étant une propriété calculée, cela implique beaucoup de conversions inutiles en arrière-plan.

3
KeithS

L'ajout de Environment.NewLine ou \r\n ne fonctionnait pas pour moi, initialement, avec ma zone de texte. J'ai trouvé que j'avais oublié d'entrer dans les propriétés Behavior de la zone de texte et de définir la propriété " Multiline " sur " True " pour qu'il ajoute les lignes! Je pensais juste que j'ajouterais cette mise en garde puisque personne d'autre ne l'a fait dans les réponses ci-dessus, et j'avais pensé que la boîte allait être automatiquement agrandie et j'avais oublié que je devais configurer la propriété Mulitline pour qu'elle fonctionne. Je sais que c'est en quelque sorte un truc osseux (c'est le genre de chose qui nous arrive tard le vendredi après-midi), mais cela pourrait aider quelqu'un à se rappeler de vérifier cela. En outre, la section Apparence contient la propriété "ScrollBars" que je devais définir sur "Les deux" pour obtenir des barres horizontales et verticales permettant de faire défiler le texte et de le visualiser dans son intégralité. Donc, la réponse ici n'est pas simplement un code en ajoutant Environment.NewLine ou \r\n au .Text, mais assurez-vous également que votre boîte est configurée correctement avec les bonnes propriétés.

1
vapcguy

Il suffit de mettre un saut de ligne dans votre texte.

Vous n'ajoutez pas de lignes en tant que méthode. Multiline prend uniquement en charge l'utilisation des sauts de ligne.

0
nycdan

Les méthodes ci-dessus n'ont pas fonctionné pour moi. J'ai l'exception suivante:

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

Il s'avère que j'avais besoin d'appeler d'abord Invoke sur mes contrôles. Voir la réponse ici .

0
Roald

Si vous savez combien de lignes vous voulez, créez un tableau de String avec autant de membres (par exemple, myStringArray) . Utilisez ensuite myListBox.Lines = myStringArray;

0
Kay Superstar