简体   繁体   中英

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

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

richTextBox1.SelectionFont = new Font("Tahoma", 12, FontStyle.Bold);
richTextBox1.SelectionColor = System.Drawing.Color.Red;

I also want to add some buttons for Bold, Italic, etc using:

richTextBox1.SelectionFont = new Font("Tahoma", 12, FontStyle.Italic);

But if I have a Bold option, this code will remove the Bold and add Italic. How can I retain the Bold and Italic?

Thanks!

This Works for me hope it will help you guys...

private void cmdBold_Click(object sender, EventArgs e)
{
   Font new1, old1;
   old1 = rtxtBox.SelectionFont;
   if (old1.Bold)
      new1 = new Font(old1, old1.Style & ~FontStyle.Bold);
   else
      new1 = new Font(old1, old1.Style | FontStyle.Bold);

   rtxtBox.SelectionFont = new1;
   rtxtBox.Focus();
}

private void cmdItalic_Click(object sender, EventArgs e)
{
  Font new1, old1;
  old1 = rtxtBox.SelectionFont;
  if (old1.Italic)
    new1 = new Font(old1, old1.Style & ~FontStyle.Italic);
  else
    new1 = new Font(old1, old1.Style | FontStyle.Italic);

  rtxtBox.SelectionFont = new1;      

  rtxtBox.Focus();
}

private void cmdUnderline_Click(object sender, EventArgs e)
{
  Font new1, old1;
  old1 = rtxtBox.SelectionFont;
  if (old1.Underline)
    new1 = new Font(old1, old1.Style & ~FontStyle.Underline);
  else
    new1 = new Font(old1, old1.Style | FontStyle.Underline);

  rtxtBox.SelectionFont = new1;
  rtxtBox.Focus();
}

Font Size

private void cmbSize_KeyPress(object sender, KeyPressEventArgs e)
    {
      if (e.KeyChar == 13)
      {
        if (float.Parse(cmbSize.Text.Trim()) == 0)
        {
          MessageBox.Show("Invalid Font Size, it must be Float Number", "Invalid Font Size", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
          cmbSize.Text = "10";
          return;
        }
        if (cmbSize.Text.Trim() != "")
        {
          Font new1, old1;
          old1 = rtxtBox.SelectionFont;
          new1 = new Font(FontFamily.GenericSansSerif, float.Parse(cmbSize.Text.Trim()), old1.Style);
          rtxtBox.SelectionFont = new1;
        }
        rtxtBox.Focus();
      }
    }

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

使用此代码

richTextBox1.Font = new Font("Tahoma", 12, FontStyle.Bold | FontStyle.Italic);

you need to do something like this..

in order ot make it italic.

 richTextBox1.SelectionFont = new Font("Tahoma", 12, richTextBox1.SelectionFont.Style | FontStyle.Italic);

//in order to make it bold

richTextBox1.SelectionFont = new Font("Tahoma", 12, richTextBox1.SelectionFont.Style | FontStyle.Bold);

Sharing a VB.NET Implementation:

Set Bold

 Private Sub BoldToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles BoldToolStripMenuItem.Click

If Not RichTextBox1.SelectionFont Is Nothing Then

            Dim currentFont As System.Drawing.Font = RichTextBox1.SelectionFont
            Dim newFontStyle As System.Drawing.FontStyle

            If RichTextBox1.SelectionFont.Bold = True Then
                newFontStyle = FontStyle.Regular
               
                BoldToolStripMenuItem.Checked = False
            Else
                newFontStyle = FontStyle.Bold
              
                BoldToolStripMenuItem.Checked = True
            End If

            RichTextBox1.SelectionFont = New Font(RichTextBox1.SelectionFont, RichTextBox1.SelectionFont.Style Xor FontStyle.Bold)

        End If
    End Sub

Set Italic

Private Sub ItalicToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ItalicToolStripMenuItem.Click

 If Not RichTextBox1.SelectionFont Is Nothing Then

            Dim currentFont As System.Drawing.Font = RichTextBox1.SelectionFont
            Dim newFontStyle As System.Drawing.FontStyle

            If RichTextBox1.SelectionFont.Italic = True Then
                newFontStyle = FontStyle.Regular
               
                ItalicToolStripMenuItem.Checked = False
            Else
                newFontStyle = FontStyle.Italic
                
                ItalicToolStripMenuItem.Checked = True
            End If

            RichTextBox1.SelectionFont = New Font(RichTextBox1.SelectionFont, RichTextBox1.SelectionFont.Style Xor FontStyle.Italic)

        End If
    End Sub

Set Underline

 Private Sub UnderlineToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles UnderlineToolStripMenuItem.Click

  If Not RichTextBox1.SelectionFont Is Nothing Then

            Dim currentFont As System.Drawing.Font = RichTextBox1.SelectionFont
            Dim newFontStyle As System.Drawing.FontStyle

            If RichTextBox1.SelectionFont.Underline = True Then
                newFontStyle = FontStyle.Regular
               
                UnderlineToolStripMenuItem.Checked = False
            Else
                newFontStyle = FontStyle.Underline
               
                UnderlineToolStripMenuItem.Checked = True
            End If

            RichTextBox1.SelectionFont = New Font(RichTextBox1.SelectionFont, RichTextBox1.SelectionFont.Style Xor FontStyle.Underline)

        End If
    End Sub

RichTextBox SelectionChanged Event

 Private Sub RichTextBox1_SelectionChanged(sender As Object, e As EventArgs) Handles RichTextBox1.SelectionChanged

 If RichTextBox1.SelectionFont.Bold = True Then

              
                BoldToolStripMenuItem.Checked = True
            Else

              
                BoldToolStripMenuItem.Checked = False
            End If

 If RichTextBox1.SelectionFont.Italic = True Then

           
            ItalicToolStripMenuItem.Checked = True
        Else

          
            ItalicToolStripMenuItem.Checked = False
        End If

 If RichTextBox1.SelectionFont.Underline = True Then

               
                UnderlineToolStripMenuItem.Checked = True
            Else

              
                UnderlineToolStripMenuItem.Checked = False
            End If

End Sub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM