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
相关产品推荐
相关产品推荐

