winforms 从控件的字体中移除FontStyle Bold

wgx48brx  于 2022-11-17  发布在  其他
关注(0)|答案(3)|浏览(144)

我感觉自己像一个真实的的菜鸟张贴这一点,但我似乎找不到任何东西为这一点...
我有一个控件,我基本上试图切换字体之间的粗体和非粗体。这应该很简单...
但是,您无法访问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
我是不是缺少了一个简单的字体构造函数来实现这一点?或者我只是缺少了一些更简单的东西?

nkcskrwz

nkcskrwz1#

我知道这是一个有点老,但我面临着完全相同的问题,并提出了这个:

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

神奇的是“~”,它是按位NOT。(请参阅MSDN KB article "~Operator"
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
ncecgwcz

ncecgwcz2#

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

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

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

falq053o

falq053o3#

试试看:

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

相关问题