修改RichTextBox字体大小时选中区域颜色变为黑色如何解决?
成因
对RichTextBox控件直接赋值全局Font属性时,控件内部会触发WM_SETFONT消息处理逻辑,该逻辑会重置所有文本的默认格式属性,同时清除所有仅作用于选区的临时样式配置(包括提前设置的SelectionBackColor和SelectionForeColor),原有的自定义选中色会被系统默认的黑色选中前景色覆盖,最终出现颜色异常。
解决方法
有两种常用的修复方案:
- 方案1:不直接修改全局Font属性,改为针对选区内的文本设置字体,避免触发全局样式重置
' 保存当前选区状态与自定义颜色 Dim selStart As Integer = RichTextBox5.SelectionStart Dim selLen As Integer = RichTextBox5.SelectionLength Dim customBackColor As Color = RichTextBox5.SelectionBackColor Dim customForeColor As Color = RichTextBox5.SelectionForeColor ' 全选文本后修改字体 RichTextBox5.SelectAll() RichTextBox5.SelectionFont = New Font("Times New Roman", RichTextBox5.Font.Size - 0.1F, FontStyle.Regular) ' 还原原选区与自定义颜色 RichTextBox5.Select(selStart, selLen) RichTextBox5.SelectionBackColor = customBackColor RichTextBox5.SelectionForeColor = customForeColor
- 方案2:如果必须修改全局Font属性,修改完成后重新赋值自定义选区颜色即可
RichTextBox5.Font = New System.Drawing.Font("Times New Roman", RichTextBox5.Font.Size - 0.1F, FontStyle.Regular) ' 替换为你自定义的颜色值即可 RichTextBox5.SelectionBackColor = Color.LightBlue RichTextBox5.SelectionForeColor = Color.White
内容的提问来源于stack exchange,提问作者Mehdi Esmaeili
相关产品推荐
相关产品推荐

