从控件字体中删除加粗的字体样式

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 我是否错过了一个可以做到这一点的简单字体构造函数?或者我只是缺少更容易的东西?

3
FontStyle.Regular不起作用了吗? - Steve
1
哈哈,@Steve 谢谢。有时候我真的错过了这些东西,太神奇了。把它作为答案并拥有它。 - ImGreg
3个回答

13

我知道这个问题有点老,但我也遇到了同样的问题,并想出了以下解决方法:

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 KB文章“~运算符”

VB.NET版本:

Dim opFont As Font = me.btn_buttonBolding.Font
If (value)
    me.btn_buttonBolding.Font = new Font(opFont, opFont.Style Or FontStyle.Bold)
Else 
    me.btn_buttonBolding.Font = new Font(opFont, opFont.Style And Not FontStyle.Bold)
End if

4

FontStyle 枚举包含 5 个不同的值。 重置先前设置的值的是 FontStyle.Regular

Regular 普通文本。
Bold 粗体文本。
Italic 斜体文本。
Underline 带下划线的文本。
Strikeout 带有穿过中间的线的文本。

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


这确实回答了问题中的示例,但并没有回答问题本身:除了位掩码之外,如果设置了另一种样式,比如 FontStyle.Italic,是否有一种方法可以去除样式而不完全恢复为 FontStyle.Regular - Jamie

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接