从FontStyle中减去标志(切换FontStyles)[C#]

从FontStyle中减去标志(切换FontStyles)[C#],c#,winforms,fonts,textbox,richtextbox,C#,Winforms,Fonts,Textbox,Richtextbox,我有个小问题。我有一个1 RichTextBox和两个按钮 我有两个按钮“切换粗体FStyle”和“切换斜体FStyle” 我希望在不影响其他字体样式的情况下切换字体样式。我希望你能理解我 下面的代码在组合字体样式时有效,但在分离/删除字体样式时无效 private void button1_Click(object sender, EventArgs e) { richTextBox1.SelectionFont = new Font(richTextBox1.Font, (richT

我有个小问题。我有一个1 RichTextBox和两个按钮

我有两个按钮“切换粗体FStyle”和“切换斜体FStyle”

我希望在不影响其他字体样式的情况下切换字体样式。我希望你能理解我

下面的代码在组合字体样式时有效,但在分离/删除字体样式时无效

private void button1_Click(object sender, EventArgs e)
{
    richTextBox1.SelectionFont = new Font(richTextBox1.Font, (richTextBox1.SelectionFont.Bold == false ? richTextBox1.SelectionFont.Style | FontStyle.Bold : richTextBox1.SelectionFont.Style));
}

private void button2_Click(object sender, EventArgs e)
{
    richTextBox1.SelectionFont = new Font(richTextBox1.Font, (richTextBox1.SelectionFont.Italic == false ? richTextBox1.SelectionFont.Style | FontStyle.Italic : richTextBox1.SelectionFont.Style));
}
  • 我将选定的文本加粗
  • 我将所选文本设置为斜体
  • 我想在粗体仍处于活动状态(或相反)时删除斜体

  • 最简单的方法是使用位异或(
    ^
    ),它只需切换值:

    private void button1_Click(object sender, EventArgs e)
    {
        richTextBox1.SelectionFont = new Font(richTextBox1.Font,
            richTextBox1.SelectionFont.Style ^ FontStyle.Bold);
    }
    
    private void button2_Click(object sender, EventArgs e)
    {
        richTextBox1.SelectionFont = new Font(richTextBox1.Font,
            richTextBox1.SelectionFont.Style ^ FontStyle.Italic);
    }
    

    当心!如果当前文本选择有多个字体,则SelectionFont将为null类似的方法也适用于
    TextBox
    控件。区别在于上面示例中的
    SelectionFont
    需要更改为
    Font
    。类似的解决方案也适用于
    TextBox
    控件。请参阅下面答案中的我的评论。