You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WinForm中如何为RichTextBox内文本设置多字体样式?

C# WinForm RichTextBox 部分文字样式设置与恢复方法

一、解析带标记文本,批量设置样式

针对你给出的示例文本(Hello *this* is my world.),可以通过解析文本中的标记(比如*包裹的内容),给指定部分设置加粗/斜体样式,步骤如下:

  1. 清空RichTextBox,逐段处理原始文本,拆分普通文本和需要设置样式的片段;
  2. 使用SelectionFont属性为指定片段设置样式,完成后恢复默认样式以便后续输入。

示例代码:

string rawText = "Hello *this* is my world.";
rtb.Clear();

int currentPos = 0;
while (currentPos < rawText.Length)
{
    int starStart = rawText.IndexOf('*', currentPos);
    if (starStart == -1)
    {
        rtb.AppendText(rawText.Substring(currentPos));
        break;
    }
    // 添加标记前的普通文本
    rtb.AppendText(rawText.Substring(currentPos, starStart - currentPos));
    currentPos = starStart + 1;

    int starEnd = rawText.IndexOf('*', currentPos);
    if (starEnd == -1)
    {
        rtb.AppendText(rawText.Substring(currentPos));
        break;
    }
    // 添加需要设置样式的文本
    int styleTextLength = starEnd - currentPos;
    rtb.AppendText(rawText.Substring(currentPos, styleTextLength));
    // 选中这段文本并设置加粗样式
    rtb.Select(rtb.TextLength - styleTextLength, styleTextLength);
    rtb.SelectionFont = new Font(rtb.Font, FontStyle.Bold);
    // 取消选中,光标回到末尾
    rtb.Select(rtb.TextLength, 0);
    currentPos = starEnd + 1;
}
// 恢复默认样式,确保后续输入为普通文本
rtb.SelectionFont = rtb.Font;

如果需要设置斜体,只需把FontStyle.Bold替换为FontStyle.Italic即可。

二、动态切换样式(按需切换加粗/斜体/普通)

如果需要在输入过程中随时切换样式(比如通过按钮触发),可以利用SelectionFont的特性:选中文本时设置样式会修改已有内容,未选中时设置会影响后续输入的文本样式。

示例按钮点击事件代码:

// 切换加粗样式
private void btnBold_Click(object sender, EventArgs e)
{
    Font currentFont = rtb.SelectionFont ?? rtb.Font;
    // 异或操作实现样式的切换(加粗<->普通)
    FontStyle newStyle = currentFont.Style ^ FontStyle.Bold;
    rtb.SelectionFont = new Font(currentFont, newStyle);
}

// 切换斜体样式
private void btnItalic_Click(object sender, EventArgs e)
{
    Font currentFont = rtb.SelectionFont ?? rtb.Font;
    FontStyle newStyle = currentFont.Style ^ FontStyle.Italic;
    rtb.SelectionFont = new Font(currentFont, newStyle);
}

// 恢复为普通样式
private void btnNormal_Click(object sender, EventArgs e)
{
    rtb.SelectionFont = new Font(rtb.Font, FontStyle.Regular);
}

关键说明

  • SelectionFont是RichTextBox样式控制的核心属性,它同时作用于选中的文本和后续输入的内容;
  • 若要同时设置多种样式(比如加粗+斜体),可以使用FontStyle.Bold | FontStyle.Italic;
  • 处理带标记的文本时,要注意边界情况(比如未闭合的标记),避免出现逻辑错误。

内容的提问来源于stack exchange,提问作者David Fournier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 06:22:37