【问题标题】:Substract Flag From FontStyle (Toggling FontStyles) [C#]从字体样式中减去标志(切换字体样式)[C#]
【发布时间】:2016-05-20 22:40:37
【问题描述】:

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

我有“切换粗体 FStyle”和“切换斜体 FStyle”的 2 个按钮。

我想切换字体样式而不影响其他字体样式。希望你能理解我。

以下代码在组合 FontStyles 时有效,但在分离/减去FontStyles 时无效

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));
}
  1. 我将所选文本设为粗体
  2. 我将所选文本设为斜体
  3. 我想在粗体仍处于活动状态(或相反)时删除斜体

【问题讨论】:

  • 解决此问题的类似方法也适用于TextBox 控件。在下面的答案中查看我的评论。

标签: c# winforms fonts textbox richtextbox


【解决方案1】:

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

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 msdn.microsoft.com/query/…
  • 类似的方法也适用于TextBox 控件。不同之处在于上例中的SelectionFont 需要更改为Font
猜你喜欢
  • 1970-01-01
  • 2016-01-20
  • 2013-03-07
  • 2013-12-06
  • 2017-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多