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

C#中RichTextBox自定义字体追加文本异常问题

问题描述

我尝试编写追加文本的重载方法,实现每行文本的字体自定义,但使用new Font()时会影响已有行的字体样式。现有实现代码如下:

public void AppendThis(string text)
{
    Preview.AppendText(text);
    Preview.AppendText("\n");
    Preview.ScrollToCaret();
}

public void AppendThis(string text, string font, float size)
{
    Preview.Font = new Font(font, size);
    Preview.AppendText(text);
    Preview.AppendText("\n");
    Preview.ScrollToCaret();
}

public void AppendThis(string text, string font, float size, FontStyle style)
{
    Preview.Font = new Font(font, size, style);
    Preview.AppendText(text);
    Preview.AppendText("\n");
    Preview.ScrollToCaret();
}

期望调用方式:

public void DisplayPreview(string path)
{
    string jsonfile = File.ReadAllText(path);
    Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(jsonfile);
    AppendThis(myDeserializedClass.basics.name, "Times New Roman", 20, FontStyle.Bold);
    AppendThis(myDeserializedClass.basics.email, "Arial", 20);
    AppendThis(myDeserializedClass.basics.location.address);
    AppendThis(myDeserializedClass.basics.location.postalCode);
}
解决方案

问题根源是直接修改Preview.Font——这个属性会改变整个控件的默认字体,导致之前的文本样式被覆盖。要实现每行独立字体,必须使用RichTextBox控件(若当前用的是普通TextBox,需替换),通过SelectionFont仅设置新追加文本的字体:

修改后的重载方法如下:

// 默认字体追加
public void AppendThis(string text)
{
    Preview.AppendText(text + "\n");
    Preview.ScrollToCaret();
}

// 指定字体和字号追加
public void AppendThis(string text, string fontName, float size)
{
    // 定位光标到文本末尾
    Preview.SelectionStart = Preview.TextLength;
    // 设置后续输入文本的字体
    Preview.SelectionFont = new Font(fontName, size);
    Preview.AppendText(text + "\n");
    Preview.ScrollToCaret();
}

// 指定字体、字号和样式追加
public void AppendThis(string text, string fontName, float size, FontStyle style)
{
    Preview.SelectionStart = Preview.TextLength;
    Preview.SelectionFont = new Font(fontName, size, style);
    Preview.AppendText(text + "\n");
    Preview.ScrollToCaret();
}

关键说明

  • SelectionStart = Preview.TextLength:将光标移至现有文本末尾,确保字体设置仅作用于新内容。
  • SelectionFont:仅影响当前选中区域或后续输入的文本,不会修改已有文本的样式。
  • 确认Preview为RichTextBox控件,普通TextBox不支持部分文本的字体自定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:43:25