16

我知道这里有很多“如何加粗文本”的问题,但没有一个答案有帮助,我认为可能是富文本框是在运行时创建的。

我正在制作一个聊天客户端,所以我有一个分行分割的富文本框,消息如下: {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),所有内容都变为粗体,所有过去的消息也变为粗体!

知道什么可能导致这种情况吗?提前致谢!

4

6 回答 6

19
 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");

希望这可以帮助 :)

于 2013-11-28T11:58:01.313 回答
16

这是我曾经使用过的一些代码:

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 创建一个新行。你也可以做下划线等。我发现像这样构建字符串比应用属性更容易。

于 2013-06-24T20:43:39.727 回答
11

这条线有问题:

textBox.Text += roomChatMessage.from + ": " + roomChatMessage.text + "\r\n";

您正在用这个新版本的字符串替换格式和文本,并且可能会从上次更新中选择粗体字体。

尝试使用 AppendText 代替:

textBox.AppendText(roomChatMessage.from + ": " + roomChatMessage.text + "\r\n");
于 2013-06-24T20:48:28.500 回答
6

在 Visual Studio 中,您可以使用以下短代码:

richTextBox1.Rtf = @"{\rtf1\ansi This is in \b bold\b0.}";

这将是:

这是粗体字

于 2015-11-04T17:30:21.853 回答
2

我觉得在执行此类操作时使用 RichTextBox.Rtf 属性可能更容易,如下所述:

MSDN:代码:在 RichTextBox 控件中以粗体格式设置字符 (Visual C#)

由于随着文本框内容的增长,处理选择实体最终可能会变得很麻烦。

于 2013-06-24T20:43:04.500 回答
0

我知道这是一篇旧帖子,但我想在此处添加此内容,因为MSDN Documentaion并没有很好地解释这一点。该属性SelectionFont至少在.Net 5

 RichTextBox.Selection.ApplyPropertyValue(FontWeightProperty, FontWeights.Bold);
于 2021-06-18T11:14:45.247 回答