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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 11:50:31