web-dev-qa-db-ja.com

TextBoxにデータの新しい行を追加する

チャットクライアントを使用していますが、現在、クリックすると複数行のテキストボックスにデータを表示するボタンがあります。これがデータを複数行のテキストボックスに追加する唯一の方法ですか?会話が非常に長くなると、文字列も非常に長くなるため、これは非常に効率が悪いと感じています。

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

        }
37
Brandon Ling

WinFormsを使用する場合:

代わりにTextBoxAppendText(myTxt)メソッドを使用してください(.net 3.5+):

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

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

    }

通常、テキスト自体のメモリフットプリントは低くなります(f.ex. 10kb内で「何もない」と言うことができます)。 TextBoxは、バッファー内のすべてのテキストをレンダリングするのではなく、可視部分のみをレンダリングするため、ラグについて心配する必要はありません。遅い操作はテキストを挿入しています。テキストの追加は比較的高速です。

コンテンツのより複雑な処理が必要な場合は、StringBuilderをテキストボックスと組み合わせて使用​​できます。これにより、テキストを非常に効率的に処理できます。

81
user1693593

以下は方法です

  1. コードから(あなたが言及した方法)->

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

    または

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

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

    テキストボックスのEnterキーを押すと、新しい行が作成されます

    b)Winformテキストボックス

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

使用しているフロントエンド(GUIテクノロジ)を指定していないため、特定の推奨事項を作成することは困難です。 WPFでは、リストボックスを作成し、チャットの新しい行ごとに新しいリストボックスアイテムをコレクションの最後に追加できます。これは、 リンク がwinforms環境で同じ結果を達成する方法についてのいくつかの提案を提供します。

0
alan

C#-serialDataはReceivedEventHandlerTextBoxです。

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

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

Visual Studioが行を削除します。もちろん、TextBoxにはすべての正しいオプションがありました。

シリアル:

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

この方法は、タイプ入力を大幅に節約し、タイプミスを防ぎます。

文字列nl = "\ r\n";

txtOutput.Text = "1行目" + nl + "2行目" + nl + "3行目";

0
DanKuz