RichTextBox加载文件后登录文本颜色异常问题求助
问题解决方案
问题根源
调用LoadFile加载RTF日志文件后,RichTextBox的当前选区格式会被文件末尾的文本格式覆盖,此时直接设置SelectionColor无法生效,导致新增的日志文本继承原有文件的黑色格式。
修复方案
方案一:定位光标到末尾后设置颜色
修改窗体加载方法,确保加载文件后光标移至文档末尾,再设置选区颜色:
private void Form1_Load(object sender, EventArgs e) { // 仅当文件存在时加载,避免首次启动报错 if (File.Exists(PATH_USER_LOG_FILE)) { txtUsersLogViewer.LoadFile(PATH_USER_LOG_FILE); } // 将光标定位到文档末尾,确保后续格式设置生效 txtUsersLogViewer.SelectionStart = txtUsersLogViewer.TextLength; txtUsersLogViewer.SelectionLength = 0; // 设置选区文本颜色为白色 txtUsersLogViewer.SelectionColor = Color.White; // 追加登录日志 string logContent = $"{Environment.UserName} - login - {DateTime.Now}{Environment.NewLine}"; txtUsersLogViewer.AppendText(logContent); // 保存更新后的日志文件 txtUsersLogViewer.SaveFile(PATH_USER_LOG_FILE); }
方案二:直接追加带格式的RTF文本
如果方案一仍有问题,可以直接构造带白色格式的RTF内容进行追加:
private void Form1_Load(object sender, EventArgs e) { if (File.Exists(PATH_USER_LOG_FILE)) { txtUsersLogViewer.LoadFile(PATH_USER_LOG_FILE); } // 将光标移至末尾 txtUsersLogViewer.SelectionStart = txtUsersLogViewer.TextLength; txtUsersLogViewer.SelectionLength = 0; // 构造白色文本的RTF片段 string logText = $"{Environment.UserName} - login - {DateTime.Now}{Environment.NewLine}"; string whiteRtf = $"{{\\rtf1\\ansi\\deff0{{\\colortbl;\\red255\\green255\\blue255;}}\\cf1 {logText}\\cf0}}"; // 追加带格式的RTF内容 txtUsersLogViewer.SelectedRtf = whiteRtf; // 保存日志 txtUsersLogViewer.SaveFile(PATH_USER_LOG_FILE); }
注意事项
- 确保
PATH_USER_LOG_FILE指向的路径有读写权限,避免保存失败 - 每次追加日志后必须调用
SaveFile,否则重启应用后新增内容会丢失 - 清理重建解决方案时,若日志文件被删除,首次启动会重新创建,此时格式正常;重启后文件存在,需确保加载后的格式设置逻辑生效
内容的提问来源于stack exchange,提问作者CeFameuxTom
相关产品推荐
相关产品推荐

