it-swarm.dev

TextBox'a yeni veri satırı ekleme

Bir sohbet istemcisi yapıyorum ve şu anda tıklandığı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 düşünüyorum, çünkü konuşma gerçekten uzun sürerse, dizi de çok uzayacaktır.

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

        }
32
Brandon Ling

WinForms kullanıyorsanız:

Bunun yerine TextBox'da AppendText(myTxt) yöntemini kullanın (.net 3.5+):

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

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

    }

Metin kendi içinde tipik olarak düşük bir bellek ayak izine sahiptir (f.ex. 10kb içerisinde "hiçbir şey" olan çok şey söyleyebilirsiniz). TextBox, arabellekteki tüm metni, yalnızca görünen kısmını oluşturmaz; bu nedenle, gecikme hakkında çok fazla endişelenmenize gerek kalmaz. Yavaş işlemler metin ekliyor. Metin eklemek nispeten hızlı.

İçeriğin daha karmaşık bir şekilde ele alınması gerekirse, metin kutusuyla birlikte StringBuilder komutunu kullanabilirsiniz. Bu, size metin işleme konusunda çok etkili bir yol sunar.

71
user1693593

Aşağıdaki yollar

  1. Kodundan (bahsettiğiniz şekilde) ->

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

    veya

    displayBox.Text += sent + Environment.NewLine;
    
  2. Kullanıcı Arayüzünden
    a) WPF

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

    Metin kutusuna Enter tuşuna basın, yeni satır oluşturulacak

    b) Winform metin kutusu 

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

Hangi ön ucu (GUI teknolojisi) kullandığınızı belirtmediğiniz için, belirli bir öneride bulunmak zor olacaktır. WPF'de bir liste kutusu oluşturabilir ve sohbet satırlarının her biri için koleksiyonun sonuna yeni bir liste kutusu ekleyebilirsin. Bu link , bir winforms ortamında aynı sonucu nasıl elde edebileceğinize dair bazı öneriler sunar.

0
alan

SerialData, ReceivedEventHandler içindeki TextBox şeklindedir.

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

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

Şimdi Visual Studio çizgilerimi bırakıyor. TextBox elbette tüm doğru seçeneklere sahipti.

Seri:

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

Bu yöntemin çok fazla yazım tasarrufu yaptığını ve çok fazla yazım hatası önlediğini biliyorum.

string nl = "\ r\n";

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

0
DanKuz