2012-11-10 18 views
20

Sto facendo un client di chat e attualmente ho un pulsante che visualizzerà i dati su una casella di testo multilinea quando si fa clic. È questo l'unico modo per aggiungere dati alla casella di testo multilinea? Ritengo che questo sia estremamente inefficiente, perché se la conversazione dovesse durare a lungo, anche la stringa diventerà molto lunga.Aggiunta di una nuova riga di dati a TextBox

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

     } 
+2

Mi sono imbattuto in un problema simile creando un semplice client di chat TCP. La mia soluzione era quella di controllare il conteggio delle righe ogni volta che aggiungevo un messaggio e quando superava una certa soglia rimuovevo le righe più vecchie. Sto postando questo come commento perché è ancora piuttosto inefficiente, ma è un'alternativa alla semplice aggiunta. –

+0

ci ho pensato, ma ci deve essere un modo migliore –

+1

Se consideri la maggior parte delle semplici applicazioni di chat è più o meno come funzionano. Anche il solo pensare a qualcosa come le finestre di chat di AOL Instant Messenger ha continuato a essere sempre più lungo.Fondamentalmente lo stesso concetto. –

risposta

54

Se si utilizza Windows Form:

utilizzare il metodo AppendText(myTxt) su lo TextBox invece (.net 3.5+):

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

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

    } 

Il testo di per sé ha in genere un ingombro di memoria insufficiente (si può dire molto all'interno di f.ex. 10kb che è "niente"). Il TextBox non esegue il rendering di tutto il testo presente nel buffer, solo la parte visibile, quindi non è necessario preoccuparsi troppo del ritardo. Le operazioni più lente stanno inserendo il testo. L'aggiunta di testo è relativamente veloce.

Se è necessaria una gestione più complessa del contenuto, è possibile utilizzare StringBuilder combinato con la casella di testo. Questo ti darà un modo molto efficiente di gestire il testo.

0

Poiché non si è specificato quale front end (tecnologia GUI) si sta utilizzando sarebbe difficile fare una raccomandazione specifica. In WPF puoi creare una listbox e per ogni nuova linea di chat aggiungi un nuovo listboxitem alla fine della raccolta. Questo link fornisce alcuni suggerimenti su come si può ottenere lo stesso risultato in un ambiente winforms.

+0

cosa intendi, ho detto che C# è un modulo –

+0

anch'io sviluppo in C#, tuttavia non uso i form di Windows (winforms). Io uso WPF e XAML. Ho anche sviluppato applicazioni che utilizzano MVC con HTML5 e Javascript che utilizzano C# per la logica di business. Ciascuna di queste tecnologie di interfaccia utente grafica ha controlli diversi che è possibile riutilizzare per la finestra di chat. – alan

+0

Ho pensato che stavate parlando di WinForms ma Alan è corretto, solo dicendo che un modulo C# è piuttosto ambiguo. Potresti volere dire WinForm, WebForm, WPF ... la lista continua di moduli che possono implementare il codice C#. –

24

seguito sono i modi

  1. dal codice (il modo in cui si è accennato) ->

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

    o

    displayBox.Text += sent + Environment.NewLine; 
    
  2. Dal UI
    a) WPF

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

    Premere il tasto Enter alla casella di testo e nuova linea verrà creato

    b) casella di testo Winform

    Set TextBox.MultiLine and TextBox.AcceptsReturn to true 
    
+0

Stavo usando un radTextBox e Environment.NewLine non funziona, ma lo fa \ r \ n. Questa risposta copre alcuni metodi diversi che lo rendono più utile in tutto. – Brad

0

Trovo che questo metodo consente di risparmiare un sacco di digitazione e impedisce molti errori di battitura.

string nl = "\ r \ n";

txtOutput.Text = "Prima riga" + nl + "Seconda riga" + nl + "Terza riga";

+1

Questa risposta è già stata data. A meno che tu non abbia qualcosa da aggiungere a quella risposta per renderlo migliore, non è necessario pubblicarlo. –

+0

Sì, Paolo, la risposta è stata data. Questo è solo un altro modo di farlo, – DanKuz

Problemi correlati