仿记事本搜索:如何让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
相关产品推荐
相关产品推荐

