Win*_*Too 2 vb.net fonts controls winforms
我必须在标签上设置.Font.Bold = True,它没有定义.Font属性,但是从表单继承Font(名称,大小,样式).为此,我从表单的设计器文件中删除了她的.Font属性.
现在我需要将此标签的文本设置为粗体,而不为此标签定义字体名称,大小等.
我尝试:
label6.Font.Bold = True
Run Code Online (Sandbox Code Playgroud)
但这不起作用(PropertyFont.Bold只读).
如果我为这个标签设置字体,如:
label6.Font = New Font(myfontname, 10, FontStyle.Bold, GraphicsUnit.Point)
Run Code Online (Sandbox Code Playgroud)
然后我得到粗体文本但标签然后不再继承表单的字体大小.
这里可以将表单的字体继承保留为标签,但在此标签上获得粗体文本吗?
不,因为您已经发现该Font.Bold属性是只读的.字体对象是不可变的,这意味着它们的属性一旦创建就无法更改.修改此属性的唯一方法是创建一个新的Font对象.
创建这个新Font时,您当然可以复制现有Font对象的属性(如表单使用的对象),但无法将两个Font对象动态耦合在一起.如果表单使用的字体大小发生更改,则将使用表单的新大小创建新的Font对象,但不会更新自定义粗体Font对象.
唯一让人困惑的是,如果你没有为子控件设置自定义字体,那就会有一些魔力.它们会自动继承父级的字体(容器控件,如表单).这些在未明确设置时从父级检索其值的属性称为环境属性.环境属性在适用的文档中进行了说明.但结果是,在你明确设置财产的地方,环境消失了.所以忘记这一点.
为了达到你想要的效果,我们需要在表单的字体大小发生变化时收到通知,作为响应,你可以使用Label控件的新大小创建一个新的粗体Font对象.幸运的是,FontChanged事件形式中只有这样一种机制.处理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
Run Code Online (Sandbox Code Playgroud)
虽然,我不确定是否/为什么这是真的有必要.在应用程序运行时,很少更改表单的字体大小.通常只在创建时发生,在这种情况下,当您检索值以为Label控件创建自定义Font对象时,它已经正确设置.