web-dev-qa-db-fra.com

Ajouter une nouvelle ligne de données à la TextBox

Je fais un client de chat, et actuellement j'ai un bouton qui affichera des données dans une zone de texte multiligne lorsque vous cliquez dessus. Est-ce la seule façon d'ajouter des données à la zone de texte multiligne? Je pense que cela est extrêmement inefficace, car si la conversation devient très longue, la chaîne le sera aussi.

private void button1_Click(object sender, EventArgs e)
        {
            string sent = chatBox.Text;
            displayBox.Text += sent + "\r\n";

        }
32
Brandon Ling

Si vous utilisez WinForms:

Utilisez la méthode AppendText(myTxt) sur la TextBox à la place (.net 3.5+):

    private void button1_Click(object sender, EventArgs e)
    {
        string sent = chatBox.Text;

        displayBox.AppendText(sent);
        displayBox.AppendText(Environment.NewLine);

    }

Le texte en lui-même a généralement une faible empreinte mémoire (vous pouvez en dire beaucoup dans les f.ex. 10ko, ce qui n’est "rien"). La zone de texte ne restitue pas tout le texte contenu dans la mémoire tampon, mais uniquement la partie visible. Vous n'avez donc pas à vous soucier de retard. Les opérations les plus lentes insèrent du texte. L'ajout de texte est relativement rapide.

Si vous avez besoin d’un traitement plus complexe du contenu, vous pouvez utiliser StringBuilder combiné avec la zone de texte. Cela vous donnera un moyen très efficace de gérer le texte.

71
user1693593

Voici les moyens

  1. À partir du code (comme vous l'avez mentionné) ->

    displayBox.Text += sent + "\r\n";
    

    ou

    displayBox.Text += sent + Environment.NewLine;
    
  2. De l'interface utilisateur
    a) WPF

    Set TextWrapping="Wrap" and AcceptsReturn="True"   
    

    Appuyez sur la touche Entrée pour accéder à la zone de texte et une nouvelle ligne sera créée.

    b) Zone de texte Winform 

    Set TextBox.MultiLine and TextBox.AcceptsReturn to true
    
29
Tilak

Parce que vous n’avez pas précisé le type d’interface frontale (technologie graphique) que vous utilisez, il serait difficile de faire une recommandation spécifique. Dans WPF, vous pouvez créer une zone de liste et ajouter pour chaque nouvelle ligne de discussion un nouvel élément de liste à la fin de la collection. This link fournit quelques suggestions sur la manière d’obtenir le même résultat dans un environnement winforms.

0
alan

C # - serialData est ReceivedEventHandler dans TextBox.

SerialPort sData = sender as SerialPort;
string recvData = sData.ReadLine();

serialData.Invoke(new Action(() => serialData.Text = String.Concat(recvData)));

Maintenant, Visual Studio supprime mes lignes. TextBox, bien sûr, avait toutes les options correctes sur.

En série:

Serial.print(rnd);
Serial.( '\n' );  //carriage return
0
Luke Lozowski

Je trouve que cette méthode économise beaucoup de frappe et évite beaucoup de fautes de frappe.

chaîne nl = "\ r\n";

txtOutput.Text = "première ligne" + nl + "deuxième ligne" + nl + "troisième ligne";

0
DanKuz