5

我感觉自己像一个真正的菜鸟发布这个,但我似乎找不到任何东西......

我有一个控件,我基本上是在尝试在粗体和非粗体之间切换字体样式。这应该很简单...

但是,您无法访问 Control.Font.Bold 属性,因为它是只读的,因此,您需要更改 Font 属性。

为了使它大胆,我只是这样做:

this.btn_buttonBolding.Font = new Font(this.btn_buttonBolding.Font, FontStyle.Bold);

不理想,但它有效。但是,我该如何移除这种粗体样式(一旦它已经是粗体了)?

我努力寻找重复项;我能找到的最接近的是这个,但它并不能完全回答我的情况: Substract Flag From FontStyle (Toggling FontStyles) [C#]

这给出了如何设置它,但不删除它:Change a font programmatically

我是否缺少可以执行此操作的字体的简单构造函数?还是我只是错过了一些更容易的东西?

4

3 回答 3

12

我知道这有点老了,但我遇到了完全相同的问题并想出了这个:

Font opFont = this.btn_buttonBolding.Font;
if(value)
{
    this.btn_buttonBolding.Font = new Font(opFont, opFont.Style | FontStyle.Bold);
}
else 
{
    this.btn_buttonBolding.Font = new Font(opFont, opFont.Style & ~FontStyle.Bold);
}

神奇之处在于“~”,它是按位非。(参见 MSDN知识库文章“~Operator”

于 2013-12-17T18:07:21.293 回答
3

FontStyle 枚举包含 5 个不同的值。重置上一组的是FontStyle.Regular

常规 普通文本。
粗体 粗体文本。
斜体 斜体文本。
下划线带下划线的文本。
删除线 中间有一条线的文本。

这是一个按位枚举,其中 Regular 为 0。因此单独设置此值会重置所有其他标志

于 2012-03-19T21:08:25.717 回答
2

试试这个:

    private void btn_buttonBolding_Click(object sender, EventArgs e)
    {
        var style = btn_buttonBolding.Font.Bold ? FontStyle.Regular : FontStyle.Bold;
        btn_buttonBolding.Font = new Font(this.Font, style);
    }
于 2012-03-19T21:03:48.063 回答