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 }