2012-03-25 19 views
1

私は単純なテキストエディタを作った。その中に、フォントファミリ、スタイル、色を変更するコンボボックスがあります。私は選択したテキストのフォントプロパティを変更するのに成功しています。 私のコードC#richtextboxフォントのプロパティ

private void fontFamilySelectedIndexChanged(object sender, EventArgs e) 
     { 
      if (notesCon[currentNotes].SelectedText != "") 
      { 
       notesCon[currentNotes].SelectionFont = new Font(fontFamily.SelectedItem.ToString(), notesCon[currentNotes].SelectionFont.Size, notesCon[currentNotes].SelectionFont.Style);     
      } 
     } 

     private void fontStyleSelectedIndexChanged(object sender, EventArgs e) 
     { 
      if (notesCon[currentNotes].SelectedText != "") 
      { 
       switch (fontStyle.SelectedItem.ToString()) 
       { 
        case "Bold": notesCon[currentNotes].SelectionFont = new Font(notesCon[currentNotes].SelectionFont.FontFamily, notesCon[currentNotes].SelectionFont.Size, FontStyle.Bold); 
         break; 
        case "Italic": notesCon[currentNotes].SelectionFont = new Font(notesCon[currentNotes].SelectionFont.FontFamily, notesCon[currentNotes].SelectionFont.Size, FontStyle.Italic); 
         break; 
        case "Regular": notesCon[currentNotes].SelectionFont = new Font(notesCon[currentNotes].SelectionFont.FontFamily, notesCon[currentNotes].SelectionFont.Size, FontStyle.Regular); 
         break; 
        case "Strikeout": notesCon[currentNotes].SelectionFont = new Font(notesCon[currentNotes].SelectionFont.FontFamily, notesCon[currentNotes].SelectionFont.Size, FontStyle.Strikeout); 
         break; 
        case "Underline": notesCon[currentNotes].SelectionFont = new Font(notesCon[currentNotes].SelectionFont.FontFamily, notesCon[currentNotes].SelectionFont.Size, FontStyle.Underline); 
         break; 

       } 
      }    
     } 

     private void fontColorSelectedValueChanged(object sender, EventArgs e) 
     { 
      if (notesCon[currentNotes].SelectedText != "") 
      { 
       notesCon[currentNotes].SelectionFont = new Font(fontFamily.SelectedItem.ToString(), notesCon[currentNotes].SelectionFont.Size, notesCon[currentNotes].SelectionFont.Style); 
       notesCon[currentNotes].SelectionColor = fontColor.SelectedItem.Color; 
      } 
     } 

私のジレンマ:

私は新しいものにリッチテキストボックスの現在のフォントのプロパティを設定しようとするたびに、それが正常に変更されますが、フォントの特性を保持しませんが前のテキストのどのようにリッチテキストボックス内のテキストの以前のフォントプロパティを変更せずに、フォントプロパティを変更する必要がありますか? お願いします、ありがとうございます!

答えて

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; 
     } 
    } 

とフォントのレンダリング:あなたがこの記事を読むことができ、より詳細と手順については

/// <summary> 
    /// Changes a font from originalFont appending other properties 
    /// </summary> 
    /// <param name="originalFont">Original font of text 
    /// <param name="familyName">Target family name 
    /// <param name="emSize">Target text Size 
    /// <param name="fontStyle">Target font style 
    /// <param name="enableFontStyle">true when enable false when disable 
    /// <returns>A new font with all provided properties added/removed to original font</returns> 
    private Font RenderFont(Font originalFont, string familyName, float? emSize, FontStyle? fontStyle, bool? enableFontStyle) 
    { 
     if (fontStyle.HasValue && fontStyle != FontStyle.Regular && fontStyle != FontStyle.Bold && fontStyle != FontStyle.Italic && fontStyle != FontStyle.Underline) 
      throw new System.InvalidProgramException("Invalid style parameter to ChangeFontStyleForSelectedText"); 

     Font newFont; 
     FontStyle? newStyle = null; 
     if (fontStyle.HasValue) 
     { 
      if (fontStyle.HasValue && fontStyle == FontStyle.Regular) 
       newStyle = fontStyle.Value; 
      else if (originalFont != null && enableFontStyle.HasValue && enableFontStyle.Value) 
       newStyle = originalFont.Style | fontStyle.Value; 
      else 
       newStyle = originalFont.Style & ~fontStyle.Value; 
     } 

     newFont = new Font(!string.IsNullOrEmpty(familyName) ? familyName : originalFont.FontFamily.Name, 
          emSize.HasValue ? emSize.Value : originalFont.Size, 
          newStyle.HasValue ? newStyle.Value : originalFont.Style); 
     return newFont; 
    } 

を:http://how-to-code-net.blogspot.ro/2014/01/how-to-make-custom-richtextbox-control.html

関連する問題