チャットクライアントを使用していますが、現在、クリックすると複数行のテキストボックスにデータを表示するボタンがあります。これがデータを複数行のテキストボックスに追加する唯一の方法ですか?会話が非常に長くなると、文字列も非常に長くなるため、これは非常に効率が悪いと感じています。
private void button1_Click(object sender, EventArgs e)
{
string sent = chatBox.Text;
displayBox.Text += sent + "\r\n";
}
WinFormsを使用する場合:
代わりにTextBox
でAppendText(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
をテキストボックスと組み合わせて使用できます。これにより、テキストを非常に効率的に処理できます。
以下は方法です
コードから(あなたが言及した方法)->
displayBox.Text += sent + "\r\n";
または
displayBox.Text += sent + Environment.NewLine;
UIから
a)WPF
Set TextWrapping="Wrap" and AcceptsReturn="True"
テキストボックスのEnterキーを押すと、新しい行が作成されます
b)Winformテキストボックス
Set TextBox.MultiLine and TextBox.AcceptsReturn to true
使用しているフロントエンド(GUIテクノロジ)を指定していないため、特定の推奨事項を作成することは困難です。 WPFでは、リストボックスを作成し、チャットの新しい行ごとに新しいリストボックスアイテムをコレクションの最後に追加できます。これは、 リンク がwinforms環境で同じ結果を達成する方法についてのいくつかの提案を提供します。
C#-serialDataはReceivedEventHandler
のTextBox
です。
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
この方法は、タイプ入力を大幅に節約し、タイプミスを防ぎます。
文字列nl = "\ r\n";
txtOutput.Text = "1行目" + nl + "2行目" + nl + "3行目";