ここに「テキストを太字にする方法」の質問がたくさんあることは知っていますが、どの回答も役に立たないため、実行時にリッチテキストボックスが作成されている可能性があります。
チャットクライアントを作成しているので、リッチテキストボックスを行に分割してあり、メッセージは次のとおりです:{名前}:{メッセージ}\r\n
名前を太字にしたいので、多くのコード例を試してみましたが、これは私が機能するのに最も近いものです:
int length = textBox.Text.Length;
textBox.Text += roomChatMessage.from + ": " + roomChatMessage.text + "\r\n";
textBox.Select(length, roomChatMessage.from.Length);
textBox.SelectionFont = new Font(textBox.Font, FontStyle.Bold);
最初のメッセージは、完全に問題なく機能し、名前は太字で示されています。しかし、2番目のメッセージを追加すると、2回目は開始インデックス(この例は37)を選択していますが、すべてが太字になり、すべての過去のメッセージも太字になります。
これを引き起こす可能性のあることについて何か考えはありますか?前もって感謝します!
この行は問題です:
textBox.Text += roomChatMessage.from + ": " + roomChatMessage.text + "\r\n";
書式設定とテキストをこの新しいバージョンの文字列に置き換えており、おそらく最後の更新から太字フォントを取得しています。
代わりにAppendTextを使用してみてください。
textBox.AppendText(roomChatMessage.from + ": " + roomChatMessage.text + "\r\n");
ObjRichTextBox.SelectionFont = new Font(ObjRichTextBox.Font, FontStyle.Bold);
ObjRichTextBox.AppendText("BOLD TEXT APPEARS HERE");
ObjRichTextBox.SelectionFont = new Font(ObjRichTextBox.Font, FontStyle.Regular);
ObjRichTextBox.AppendText("REGULAR TEXT APPEARS HERE");
お役に立てれば :)
ここに私が一度使用したいくつかのコードがあります:
var sb = new StringBuilder();
sb.Append(@"{\rtf1\ansi");
sb.Append(@"\b Name: \b0 ");
sb.Append((txtFirstName.Text);
sb.Append(@" \line ");
sb.Append(@"\b DOB: \b0 ");
sb.Append(txtDOBMonth.Text);
sb.Append(@" \line ");
sb.Append(@"\b ID Number: \b0 ");
sb.Append(txtIdNumber.Text);
sb.Append(@" \line \line ");
sb.Append(@"}");
richTextBox.Rtf = sb.ToString();
@ "\ rtf1\ansi"を追加すると、\ bおよび\ b0を使用して文字列内でボールドを宣言できます。そして、\ lineは新しい行を作成します。下線などを付けることもできます。プロパティを適用するよりも、このような文字列を作成する方が簡単だと思いました。
Visual Studioでは、次の短いコードを使用できます。
richTextBox1.Rtf = @"{\rtf1\ansi This is in \b bold\b0.}";
そうなる:
これはboldにあります
ここで述べたように、この種のアクションを実行するときは、RichTextBox.Rtfプロパティを使用する方が簡単かもしれません。
MSDN:コード:RichTextBoxコントロールの太字の文字の書式設定(Visual C#)
テキストボックスのコンテンツが大きくなると、選択エンティティの処理が煩雑になる場合があります。