2012-11-10 17 views
20

Sohbet istemcisi yapıyorum ve şu anda tıklatıldığında çok satırlı bir metin kutusuna veri gösterecek bir düğmem var. Çok satırlı metin kutusuna veri eklemenin tek yolu bu mu? Bunun son derece verimsiz olduğunu hissediyorum, çünkü eğer konuşma gerçekten uzun sürerse dizge gerçekten uzun olacaktır.TextBox'a yeni veri satırı ekleme

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

     } 
+2

Basit bir TCP sohbet istemcisi oluşturarak benzer bir sorunla karşılaştım. Benim bir çözüm eklediğimde ve belirli bir eşiği aştığında en eski satırları kaldırmak için çözümüm satır sayısını kontrol etmekti. Bunu bir yorum olarak gönderiyorum çünkü hala oldukça verimsiz ama sadece eklemenin bir alternatifi. –

+0

Bunu düşündüm ama daha iyi bir yolu olmalı –

+1

Eğer hemen hemen nasıl çalıştıkları basit sohbet uygulamaları düşünüyorsanız. AOL Instant Messenger sohbet pencereleri gibi bir şey hakkında düşünmek bile daha uzun ve daha uzun sürmeye devam etti.Temelde aynı kavram. –

cevap

54

Eğer WinForms kullanıyorsanız:

Kullanım üzerinde AppendText(myTxt) yöntem bunun yerine TextBox (.net 3.5+):

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

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

    } 

Kendi içinde metin genellikle düşük bellek alanıdır (f.ex. 10kb "hiçbir şey"). TextBox, yalnızca görünebilir kısım olan tamponda bulunan tüm metni oluşturmaz, bu nedenle gecikmeyle ilgili çok fazla endişelenmenize gerek yoktur. Daha yavaş işlemler metin ekliyor. Metin eklemek nispeten hızlıdır.

İçeriğin daha karmaşık bir şekilde ele alınması gerekiyorsa, metin kutusuyla birlikte StringBuilder'u kullanabilirsiniz. Bu size metin işlemek için çok verimli bir yol verecektir.

0

Kullandığınız ön uç (GUI) teknolojisini belirlemediğinden, belirli bir öneride bulunmanız zor olacaktır. WPF'de bir liste kutusu oluşturabilir ve her yeni sohbet hattı için koleksiyonun sonuna yeni bir liste kutusu ekleyin. Bu link, aynı sonucu bir winform ortamında nasıl elde edebileceğinize dair bazı önerilerde bulunur. Takip

+0

Ne demek istiyorsun, C# –

+0

formunu ben de C# olarak geliştirdim dedim, ancak windows formları (winforms) kullanmıyorum. WPF ve XAML kullanıyorum. Ayrıca iş mantığı için C# kullanan HTML5 ve Javascript ile MVC kullanarak uygulamalar geliştirdim. Bu grafiksel kullanıcı arayüzü teknolojilerinin her biri, sohbet pencereniz için yeniden kullanabileceğiniz farklı kontrollere sahiptir. – alan

+0

WinForms hakkında konuştuğunuzu farz ettim ama Alan doğru, sadece C# formunun biraz belirsiz olduğunu söylüyordum. WinForm, WebForm, WPF ... demek istediniz, liste C# kodunu uygulayabilecek formlardan devam ediyor. –

24

kodu (Bahsettiğiniz şekilde) Gönderen yolları

  1. vardır - UI
    itibaren>

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

    veya

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

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

    basın oluşturulacak metin ve yeni hat için Enter tuşuna

    b) Winform metin kutusu

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

Bir radTextBox kullanıyordum ve Environment.NewLine çalışmıyor, ancak \ r \ n yok. Bu cevap, her yerde daha yararlı hale getiren birkaç farklı yöntemi kapsamaktadır. – Brad

0

Bu yöntemin çok fazla yazarak kaydedilmesini ve yazım hatalarının önüne geçilmesini öneriyorum.

dize nl = "\ r \ n";

txtOutput.Text = "İlk satır" + nl + "İkinci satır" + nl + "Üçüncü satır";

+1

Bu cevap zaten verildi. Daha iyi bir hale getirmek için bu cevaba ekleyecek bir şeyiniz olmadıkça, yayınlamaya gerek yoktur. –

+0

Evet Paul, cevap verildi. Bu, bunu yapmanın başka bir yolu. – DanKuz