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

多RichTextBox控件场景下如何实现文本加粗功能?

如何在多个RichTextBox控件中实现文本加粗操作?

嘿,这个问题其实很常见,我来给你捋清楚怎么适配多RichTextBox的场景~首先得提一句:你原来的单个控件代码有个小问题——直接创建新Font只指定FontStyle.Bold会丢失原文本的字号、字体家族等属性,所以我们先修正这个细节,再适配多控件场景。

方案一:跟踪当前活动的RichTextBox

这种方法适合需要持续跟踪用户正在操作哪个RichTextBox的场景,步骤如下:

  1. 在窗体类中声明一个变量,用来记录当前获得焦点的RichTextBox:
private RichTextBox _activeRichTextBox;
  1. 给所有RichTextBox控件绑定GotFocus事件(可以在设计器里逐个绑定,或者在窗体构造函数里循环绑定):
// 假设你的RichTextBox控件名为richTextBox1、richTextBox2...
private void Form1_Load(object sender, EventArgs e)
{
    // 给每个RichTextBox绑定GotFocus事件
    richTextBox1.GotFocus += RichTextBox_GotFocus;
    richTextBox2.GotFocus += RichTextBox_GotFocus;
    // 更多控件依次添加...
}

private void RichTextBox_GotFocus(object sender, EventArgs e)
{
    // 记录当前获得焦点的RichTextBox
    _activeRichTextBox = sender as RichTextBox;
}
  1. 修改加粗按钮的点击事件,针对当前活动的控件操作:
private void BoldToolStripMenuItem_Click(object sender, EventArgs e)
{
    // 先判断是否有活动的RichTextBox,且有文本被选中
    if (_activeRichTextBox != null && _activeRichTextBox.SelectionLength > 0)
    {
        Font currentFont = _activeRichTextBox.SelectionFont;
        if (currentFont != null)
        {
            // 切换加粗状态:已经加粗就取消,未加粗则设置加粗
            FontStyle newFontStyle = currentFont.Style ^ FontStyle.Bold;
            _activeRichTextBox.SelectionFont = new Font(
                currentFont.FontFamily,
                currentFont.Size,
                newFontStyle
            );
        }
    }
}

方案二:直接获取当前焦点控件(更简洁)

如果不需要持续跟踪活动控件,也可以直接通过窗体的ActiveControl属性获取当前获得焦点的控件,省去绑定事件的步骤:

private void BoldToolStripMenuItem_Click(object sender, EventArgs e)
{
    // 判断当前焦点控件是否是RichTextBox,且有文本选中
    if (ActiveControl is RichTextBox currentRtb && currentRtb.SelectionLength > 0)
    {
        Font currentFont = currentRtb.SelectionFont;
        if (currentFont != null)
        {
            FontStyle newFontStyle = currentFont.Style ^ FontStyle.Bold;
            currentRtb.SelectionFont = new Font(
                currentFont.FontFamily,
                currentFont.Size,
                newFontStyle
            );
        }
    }
}

关键注意点

  • 一定要判断SelectionLength > 0:避免对未选中的文本执行无效操作
  • 基于原有SelectionFont修改样式:这样不会丢失原文本的字号、字体等属性
  • 处理SelectionFont为null的情况:比如RichTextBox为空时,SelectionFont可能是null,需要做判空处理

内容的提问来源于stack exchange,提问作者Ka Chun Chan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:04:47