C# WinForm中如何为RichTextBox内文本设置多字体样式?
C# WinForm RichTextBox 部分文字样式设置与恢复方法
一、解析带标记文本,批量设置样式
针对你给出的示例文本(Hello *this* is my world.),可以通过解析文本中的标记(比如*包裹的内容),给指定部分设置加粗/斜体样式,步骤如下:
- 清空RichTextBox,逐段处理原始文本,拆分普通文本和需要设置样式的片段;
- 使用
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
相关产品推荐
相关产品推荐

