C# 为什么必须在RTF之后设置字体?
在下面的代码中,如果我在C# 为什么必须在RTF之后设置字体?,c#,winforms,richtextbox,C#,Winforms,Richtextbox,在下面的代码中,如果我在Rtf之前设置Font,字体不会改变Font。这是RichTextBox的一些怪癖吗 [TestMethod] public void FontProblemTest() { Form f = new Form(); RichTextBox brtb = new RichTextBox(); brtb.Width = 800; b
Rtf
之前设置Font
,字体不会改变<必须在Rtf
之后设置code>Font。这是RichTextBox
的一些怪癖吗
[TestMethod]
public void FontProblemTest()
{
Form f = new Form();
RichTextBox brtb = new RichTextBox();
brtb.Width = 800;
brtb.Height = 500;
brtb.Font = new System.Drawing.Font(new System.Drawing.FontFamily("Courier New"), 8.25F, System.Drawing.FontStyle.Regular);//font set here has no effect
brtb.Rtf = @"{\rtf1\ansi\deff0{\fonttbl{\f0\fnil Arial;}{\f1\fnil\fcharset0 Courier New;}}" +
@"{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\trowd\trgaph10\trleft-10\trpaddl10\trpaddr10\trpaddfl3\trpaddfr3" +
@"\cellx1140\cellx3740\cellx7340\pard\intbl\lang1033\f0\fs20\cell Whole Chart, Low to High\cell Most Recent (7/14/2002 10:17 AM)\cell\row" +
@"}";
//brtb.Font = new System.Drawing.Font(new System.Drawing.FontFamily("Courier New"), 8.25F, System.Drawing.FontStyle.Regular);//font must be set after rtf.
f.Controls.Add(brtb);
f.Width = 1000;
f.Height = 800;
f.ShowDialog();
}
我认为Rtf负责字体/颜色/间距等。。。插入时字体已更改
brtb.Font = new System.Drawing.Font(new System.Drawing.FontFamily("Courier New"), 8.25F, System.Drawing.FontStyle.Regular);//font set here has no effect
brtb.Rtf = @"{\rtf1\ansi\deff0{\fonttbl{\f0\fnil Arial;}{\f1\fnil\fcharset0 Courier New;}}" +
@"{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\trowd\trgaph10\trleft-10\trpaddl10\trpaddr10\trpaddfl3\trpaddfr3" +
@"\cellx1140\cellx3740\cellx7340\pard\intbl\lang1033\f0\fs20\cell Whole Chart, Low to High\cell Most Recent (7/14/2002 10:17 AM)\cell\row" +
@"}";
但是因为你插入了
brtb.Font = new System.Drawing.Font(new System.Drawing.FontFamily("Courier New"), 8.25F, System.Drawing.FontStyle.Regular);//font set here has no effect
brtb.Rtf = @"{\rtf1\ansi\deff0{\fonttbl{\f0\fnil Arial;}{\f1\fnil\fcharset0 Courier New;}}" +
@"{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\trowd\trgaph10\trleft-10\trpaddl10\trpaddr10\trpaddfl3\trpaddfr3" +
@"\cellx1140\cellx3740\cellx7340\pard\intbl\lang1033\f0\fs20\cell Whole Chart, Low to High\cell Most Recent (7/14/2002 10:17 AM)\cell\row" +
@"}";
它只会覆盖您之前设置的字体
备注将brtb.Rtf值保存到新的.Rtf文档将允许您查看在brtb.Rtf中创建的行
谢谢
我希望这有帮助:)不要在RTF字符串中包含字体。您的RichTextBox正在指定Courier New,但您的RTF代码将用Arial替代它
brtb.Rtf = @"{\rtf1\ansi" +
@"{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\trowd\trgaph10\trleft-10\trpaddl10\trpaddr10\trpaddfl3\trpaddfr3" +
@"\cellx1140\cellx3740\cellx7340\pard\intbl\lang1033\f0\cell Whole Chart, Low to High\cell Most Recent (7/14/2002 10:17 AM)\cell\row" +
@"}";
还请注意,我也从rtf文本中删除了\fs20
,该文本使用了较大的字体
设置RichTextBox控件的RTF属性后,它将自己重新写入:
{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 Courier New;}
\viewkind4\uc1\trowd\trgaph10\trleft-10\cellx1140\cellx3740\cellx7340\pard\intbl\lang1033\f0\fs17\cell整个图表,从低到高\cell最近(7/14/2002 10:17 AM)\cell\row
\pard\fi-10\par
}