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

仿记事本搜索:如何让RichTextBox失焦后仍保持选中内容可见?

解决RichTextBox失焦后保持选中内容可见的问题

这个需求我在做自定义记事本工具的时候刚好踩过坑,其实有个超简单的内置属性就能搞定,另外也可以通过自定义绘制实现更个性化的高亮效果,下面分别说:

方法一:利用内置属性快速解决

RichTextBox控件本身就带了一个HideSelection属性,默认值是true——意思就是控件失去焦点时,自动隐藏选中内容。你只需要把这个属性改成false,就能让选中内容在失焦后依然保持高亮显示,和系统记事本的效果完全一致!

操作方式:

  • 可视化设计界面:找到RichTextBox的属性面板,直接把HideSelection改成False就行。
  • 代码设置:在窗体初始化或者控件创建时加上这句:
richTextBox1.HideSelection = false;

方法二:自定义绘制实现个性化高亮(可选)

如果你想自定义选中内容的高亮样式(比如半透明效果、特殊颜色),可以通过处理RichTextBox的Paint事件手动绘制选中区域:

private void richTextBox1_Paint(object sender, PaintEventArgs e)
{
    var rtb = sender as RichTextBox;
    // 仅当控件失焦且存在选中内容时执行绘制
    if (rtb != null && rtb.SelectionLength > 0 && !rtb.Focused)
    {
        // 获取选中区域的起始和结束坐标
        Point startPos = rtb.GetPositionFromCharIndex(rtb.SelectionStart);
        Point endPos = rtb.GetPositionFromCharIndex(rtb.SelectionStart + rtb.SelectionLength);
        
        // 计算选中区域的矩形范围
        Rectangle selectionRect = new Rectangle(
            startPos.X,
            startPos.Y,
            endPos.X - startPos.X,
            rtb.Font.Height
        );
        
        // 自定义高亮画笔(这里用半透明浅蓝,你可以按需调整颜色和透明度)
        using (Brush highlightBrush = new SolidBrush(Color.FromArgb(150, Color.LightBlue)))
        {
            e.Graphics.FillRectangle(highlightBrush, selectionRect);
        }
    }
}

注意:用这种方法时,要确保HideSelection保持默认的true,避免默认高亮和自定义绘制的内容重叠。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:18:14