2014-11-02 56 views
1

我有一个richtextbox,我想使它像写字板一样工作。我的问题是,例如,如果我使用Calibri字体输入“123”,然后使用Arial字体输入“456”,并且我想更改2345的大小,它不会让我这样做,因为他们有两个不同的字体类型。这是我有问题:如何在C#中的richtextbox中更改多种尺寸的字体?

private void combo_sizes_TextChanged(object sender, EventArgs e) 
{ 
    if (rtb.SelectionFont == null) 
    { 
     rtb.SelectionFont = new Font(combo_fonts.Text, Convert.ToInt16(combo_sizes.Text)); 
    } 
    rtb.SelectionFont = new Font(rtb.SelectionFont.FontFamily, Convert.ToInt16(combo_sizes.Text)); 
} 

我知道THA当RTB选定的文本包含多种字体的SelectionFont等于空,所以在这种情况下,我已获得所选文本的大小和字体来自两个组合框,但我想更改大小而不会丢失其原始字体。有解决方案吗?

感谢

回答

0

打破你selected textchar秒。获取每个char的字体,并更改其大小。

+0

我忘了说我是一个基本的程序员,所以我没有得到你的答案。请,你能告诉我该怎么做吗? – 2014-11-02 14:07:25

+1

没有人是出生的程序员。 :)当你练习时,你变得越来越高效。我会尽可能简单地更新我的答案。 – Shaharyar 2014-11-02 14:10:17

+0

WPF还是Winform? – Shaharyar 2014-11-02 14:12:38

0

有在RichTextBox(RTB)两个内置的字体:

  • Font是将后对于任何输入中使用的一个。所以,如果你想切换到另一种字体,这是你应该设置的
  • SelectionFont但是是当前选择的字体。这将随选择而改变,但它也用于集合已经输入的部分文本的字体。

但是在一个时间和地点只能有一个。如果您想切换回标准Front,您需要在某处保留标准字体。

或者您可以存储您在列表中使用的所有字体,并且您可以在组合框中提供它们。

另外请注意:

  • 已经输入的文本后必须做可以选择一个部件,然后改变该选择的属性所有格式:字体,颜色,款式..
  • 以任何方式对文本的任何部分进行了格式化之后,您不得直接在代码中更改文本,而只使用AppendText,Copy,Cut,Past或其他方法,否则您会弄乱格式!

您的代码可能像这样工作:

public Form1() 
{ 
    InitializeComponent(); 

    lastSelectionFont = rtb.SelectionFont; 
    lastFont = rtb.Font; 
    //.. 

} 

Font lastSelectionFont; 
Font lastFont; 
private void richTextBox1_TextChanged(object sender, EventArgs e) 
{ 

    if (rtb.SelectionLength > 0) 
    { 
     lastSelectionFont = rtb.SelectionFont; 
     rtb.SelectionFont = new Font(rtb.SelectionFont.FontFamily, 
           Convert.ToInt16(combo_sizes.Text)); 
    } 
    else 
    { 
     lastFont = rtb.Font; 
     rtb.Font = new Font(rtb.Font.FontFamily, 
           Convert.ToInt16(combo_sizes.Text)); 
    } 
} 

注意ubnless将其设置为null SelectionFont将不能为空。在没有选择的情况下,您可能遇到了问题。

但是,我不确定您'保存'以前的Forn的想法。想想wordPad:它也没有这样的想法。将所有使用的字体添加到字体列表中,甚至可以使用圆角颜色,以及字体&样式的好听的名字听起来非常有吸引力。

+0

嗨,谢谢你的帮助。创建lastSelectionFont和lastFont时遇到问题,我得到这个错误: “字段初始值设定项不能引用非静态字段,方法或属性” – 2014-11-02 17:00:06

+0

是的,我的错误 - 只能在编译时计算的表达式可以像I没有。对不起,我已经更改了代码,并将intitalization转移到窗体的构造函数中。 – TaW 2014-11-02 17:03:13

+0

为什么要创建一个新的ComboBox? – 2014-11-02 17:58:19