我必须在没有定义.Font属性的标签上设置.Font.Bold = True,但是从表单继承Font(名称,大小,样式)。为此,我从表单的设计器文件中删除了她的.Font属性。
现在我需要将此标签的文本设置为粗体,而不为此标签定义字体名称,大小等。
我试试:
label6.Font.Bold = True
但这不起作用(Property .Font.Bold只读) 如果我为此标签设置字体,如:
label6.Font = New Font(myfontname, 10, FontStyle.Bold, GraphicsUnit.Point)
然后我得到粗体文本但标签然后不再继承表单的字体大小。
是否可以将表单的字体继承保留为标签,但在此标签上获取粗体文字?
答案 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对象时,它已经正确设置。