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:
@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.
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();
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.
Essaye ça
textBox1.Text += "SomeText\r\n"
tu peux aussi essayer
textBox1.Text += "SomeText" + Environment.NewLine;
Où \r
est le retour à la ligne et \n
est la nouvelle ligne
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);
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.
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.
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.
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 .
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;