57

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

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

        }
4

5 に答える 5

109

WinFormsを使用する場合:

代わりに(.net 3.5+)のAppendText(myTxt)方法を使用してください。TextBox

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

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

    }

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

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

于 2012-11-10T07:48:46.203 に答える
46

以下は方法です

  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
    
于 2012-11-10T03:56:27.343 に答える
0

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

于 2012-11-10T03:35:31.623 に答える
0

C# - serialDataReceivedEventHandlerTextBox.

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
于 2018-09-25T16:31:04.657 に答える