在继承的标签上设置Font.Bold

时间:2013-03-20 23:12:16

标签: vb.net winforms fonts controls

我必须在没有定义.Font属性的标签上设置.Font.Bold = True,但是从表单继承Font(名称,大小,样式)。为此,我从表单的设计器文件中删除了她的.Font属性。

现在我需要将此标签的文本设置为粗体,而不为此标签定义字体名称,大小等。

我试试:

label6.Font.Bold = True

但这不起作用(Property .Font.Bold只读) 如果我为此标签设置字体,如:

label6.Font = New Font(myfontname, 10, FontStyle.Bold, GraphicsUnit.Point)

然后我得到粗体文本但标签然后不再继承表单的字体大小。

是否可以将表单的字体继承保留为标签,但在此标签上获取粗体文字?

1 个答案:

答案 0 :(得分:5)

不,因为您已经发现Font.Bold属性是只读的。字体对象是不可变的,这意味着它们的属性一旦创建就无法更改。修改此属性的唯一方法是创建一个新的Font对象。

创建这个新Font时,您当然可以复制现有Font对象的属性(如表单使用的对象),但无法将两个Font对象动态耦合在一起。如果表单使用的字体大小发生更改,则将使用表单的新大小创建新的Font对象,但不会更新自定义粗体Font对象。

唯一让人感到困惑的是,如果你没有为子控件设置自定义字体,那就会有一些魔力。它们会自动继承父级的字体(容器控件,如表单)。这些在未明确设置时从父级检索其值的属性称为环境属性。环境属性在适用的the documentation中进行了解释。但结果是,在你明确设置财产的地方,环境消失了。所以忘掉那个。

要实现您想要的效果,我们需要在表单的字体大小更改时收到通知,作为响应,您可以使用Label控件的新大小创建一个新的粗体Font对象。幸运的是,FontChanged event形式存在这样一种机制。处理表单的FontChanged事件,作为响应,为Label控件创建一个新的Font对象。例如:

Private Sub myForm_FontChanged(ByVal sender As Object, ByVal e As EventArgs) Handles myForm.FontChanged
    Dim oldFont As Font = myLabel.Font
    myLabel.Font = New Font(myForm.Font, myForm.Font.Style Or FontStyle.Bold)
    oldFont.Dispose()
End Sub

虽然,我不确定是否/为什么这是真的有必要。在应用程序运行时,很少更改表单的字体大小。通常只在创建时发生,在这种情况下,当您检索值以为Label控件创建自定义Font对象时,它已经正确设置。