我知道这里有很多“如何加载文本”的问题,但没有一个答案有帮助,我认为可能是在运行时创建了富文本框。
我正在创建一个聊天客户端,所以我有一个分成行的富文本框,消息如下: {Name}:{Message} \ 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);
第一条消息,它完全正常,名称以粗体显示。但是当我添加第二条消息时,即使第二次我选择了起始索引(这个例子是37),一切都变成了粗体,但是所有过去的消息都变成了粗体!
任何可能导致这种情况的想法? 提前谢谢!
答案 0 :(得分:15)
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");
希望这会有所帮助:)
答案 1 :(得分:10)
这一行是个问题:
textBox.Text += roomChatMessage.from + ": " + roomChatMessage.text + "\r\n";
您正在使用此新版本的字符串替换格式和文本,并且可能会从上次更新中获取粗体字。
请尝试使用AppendText:
textBox.AppendText(roomChatMessage.from + ": " + roomChatMessage.text + "\r\n");
答案 2 :(得分:8)
以下是我曾经使用过的一些代码:
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(@"}");
rtxtRequest.Rtf = sb.ToString();
如果你追加@“\ rtf1 \ ansi”,你可以使用\ b和\ b0在字符串中声明粗体。而\ line创建了一个新行。您也可以使用下划线等。我发现像这样构建String比应用属性更容易。
答案 3 :(得分:3)
在Visual Studio中,您可以使用以下简短代码:
richTextBox1.Rtf = @"{\rtf1\ansi This is in \b bold\b0.}";
它将是:
这是粗体
答案 4 :(得分:2)
我认为在执行此类操作时使用RichTextBox.Rtf属性可能更容易,如下所述:
MSDN: Code: Formatting Characters in Bold in a RichTextBox Control (Visual C#)
由于随着文本框内容的增长,处理选择实体可能会变得很麻烦。
答案 5 :(得分:0)
我知道这是一篇旧帖子,但我想在这里添加它,因为 MSDN Documentaion 并没有很好地解释这一点。属性 SelectionFont
至少在 .Net 5
RichTextBox.Selection.ApplyPropertyValue(FontWeightProperty, FontWeights.Bold);