2011-04-03 33 views
3

我在「richTextBox」和「comboBox」中有一些字體名稱的一些文本。如果從「組合框」中選擇了新字體,我想更改「richTextBox」中的文本字體。我正在使用以下代碼。C# - 動態改變RichTextBox中文本的字體?

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (comboBox1.SelectedIndex == 1) 
     richTextBox1.Font = new Font("Comic Sans MS", 14); 
} 

問題是,如果我選擇字體,文本不會自動更改其字體,它只會改變,如果我鍵入一些新的文本。我也試過richTextBox1.SelectionFont而不是richTextBox1.Font。在上面的代碼之後,我還添加了InputTextBox.Refresh();以靜態地刷新文本框。

如何通過從comboBox中選擇來改變文本的字體?

更新:我想通了,上面的代碼是好的,但問題是,我用錯了事件調用,代替comboBox1_SelectedIndexChanged()使用comboBox1_SelectedValueChanged(),現在工作得很好。

提示:如果你想改變整個文本框的字體使用richTextBox1.Font,如果要更改選定文本的字體只能使用richTextBox1.SelectionFont

回答

6

你可以改變SelectedFont選項之前選擇的所有文字:

this.richTextBox1.SelectAll(); 
this.richTextBox1.SelectionFont = newFont; 
+0

的問題是選擇文本的不是,其實我正在使用錯誤的事件。我已經更新了我的問題,參見上文。 – ePandit 2011-04-05 01:09:42

0

你必須在你的文字爲迭代。這是一種方法,它可以幫助你:如果你想看到我是如何做到這一點,你可以閱讀這篇文章

private void ChangeFontStyleForSelectedText(string familyName, float? emSize, FontStyle? fontStyle, bool? enableFontStyle) 
    { 
     _maskChanges = true; 
     try 
     { 
      int txtStartPosition = txtFunctionality.SelectionStart; 
      int selectionLength = txtFunctionality.SelectionLength; 
      if (selectionLength > 0) 
       using (RichTextBox txtTemp = new RichTextBox()) 
       { 
        txtTemp.Rtf = txtFunctionality.SelectedRtf; 
        for (int i = 0; i < selectionLength; ++i) 
        { 
         txtTemp.Select(i, 1); 
         txtTemp.SelectionFont = RenderFont(txtTemp.SelectionFont, familyName, emSize, fontStyle, enableFontStyle); 
        } 

        txtTemp.Select(0, selectionLength); 
        txtFunctionality.SelectedRtf = txtTemp.SelectedRtf; 
        txtFunctionality.Select(txtStartPosition, selectionLength); 
       } 
     } 
     finally 
     { 
      _maskChanges = false; 
     } 
    } 

http://how-to-code-net.blogspot.ro/2014/01/how-to-make-custom-richtextbox-control.html 祝你好運;)