RichTextBox font style button for Bold and/or Italic (how to code so more than one can be chosen instead of replacing

前端 未结 5 844
小鲜肉
小鲜肉 2021-01-27 19:48

Right now I am using some buttons with the following code:

richTextBox1.SelectionFont = new Font(\"Tahoma\", 12, FontStyle.Bold);
richTextBox1.SelectionColor = S         


        
5条回答
  •  清歌不尽
    2021-01-27 20:45

    What you really need to change both existing and coming text is this:

    if (richTextBox2.SelectionLength > 0 ) richTextBox2.SelectionFont =
     new Font(richTextBox1.SelectionFont, FontStyle.Bold | richTextBox1.SelectionFont.Style);
    else richTextBox2.Font =
     new Font(richTextBox1.Font, FontStyle.Bold | richTextBox1.Font.Style);
    

    Note that in order to work the selection must not have a mix of styles..

    Also you probably ought to use CheckBoxes with Appearence=Button

    If you are using those CheckBoxes make sure you don't code their default event CheckedChanged as this would also fire when you set their state in code!

    To switch a Style on and off you can use maybe code like this in the Click events of the style boxes:

    FontStyle style = checkBox1.CheckState == CheckState.Checked ? 
                        FontStyle.Italic : FontStyle.Regular;
    
    if (richTextBox2.SelectionLength > 0) richTextBox2.SelectionFont =
        new Font(richTextBox1.SelectionFont, style | richTextBox1.SelectionFont.Style);
    else richTextBox2.Font =
        new Font(richTextBox1.Font, style | richTextBox1.Font.Style);
    

    This first decides on the new state to set and then set it.

    note that I did not use the Checked Property of the CheckBox! To reflect a selection with a mix of bold and non-bold text we need a third state, so the CheckBoxes should have ThreeState=true.

    Code to set the states on only two style boxes could look like this:

    private void richTextBox2_SelectionChanged(object sender, EventArgs e)
    {
       // mixed state:   
       if (richTextBox2.SelectionFont == null)
       {
         checkBox1.CheckState = CheckState.Indeterminate;
         checkBox2.CheckState = CheckState.Indeterminate;
         return;
       }
       checkBox1.Checked =
          (richTextBox2.SelectionFont.Style & FontStyle.Bold) == FontStyle.Bold;
       checkBox2.Checked =
          (richTextBox2.SelectionFont.Style & FontStyle.Italic) == FontStyle.Italic;
    }
    

    Starting to look a little larger than you thought at the beginning? Well, it is.. take your time!! (And we haven't even begun with Fonts and sizes ;-)

提交回复
热议问题