为什么必须在RTF之后设置Font?

时间:2012-10-01 21:39:26

标签: c# winforms richtextbox

在下面的代码中,如果我在Font之前设置Rtf,则字体不会更改。必须在Font之后设置Rtf。这是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();
        }

2 个答案:

答案 0 :(得分:1)

我认为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.Rtf值保存到新的.rtf文档将允许您查看在brtb.Rtf中创建的行

谢谢,

我希望这会有所帮助:)

答案 1 :(得分:1)

不要在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整个图表,从低到高\单元格最近一次(7/14/2002 10:17 AM) )\细胞\排   \ PARD \ FI-10 \帕   }