如何获得控件's字体的默认值?
本文关键字:字体 默认值 何获得 控件 | 更新日期: 2023-09-27 18:17:03
我试图得到一个控件的字体的默认值,所以我可以确定它是否是当前的默认值。
如何获得控件字体的默认值?
i trying 通过反射获取Font
属性的DefaultValue
属性:
// Gets the attributes for the property.
AttributeCollection attributes = TypeDescriptor.GetProperties(label1)["ForeColor"].Attributes;
//Find the "DefaultValue" attribute
DefaultValueAttribute myAttribute = (DefaultValueAttribute)attributes[typeof(DefaultValueAttribute)];
除非没有默认值属性(myAttribute
为null)
然后我意识到有AmbientValue
属性,这意味着属性的值来自控件的父控件。
在control.Parent
链上发现每个控件都有一个AmbientValue
属性标签,一直到Form
。
- label1
[AmbientValue]
(no DefaultValue)- form1
[AmbientValue]
(no DefaultValue)-
null
-
- form1
那么我如何获得控件的Font
属性的默认值?
如果你说的是WinForms,我认为Control。DefaultFont属性应该有所帮助。
我的理解是,"默认字体"是指直接分配的字体,而不是继承的环境字体。
在Control类中,有一个名为IsFontSet的内部方法。如果Font为空,它将返回false。bool? IsFontSet = null;
try {
Type t = typeof(Control);
System.Reflection.MethodInfo mi = t.GetMethod("IsFontSet", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
if (mi != null) {
IsFontSet = (bool?) mi.Invoke(view, null);
}
} catch {}
使用了一个可空bool值,因此如果方法名改变,它的值将为空。使用try-catch,以便如果返回类型从bool更改为其他类型,代码不会崩溃。