我正在尝试获取控件字体的默认值,以便我可以确定它当前是否为默认值。
如何获取控件字体的默认值?
我尝试通过反思获取DefaultValue
属性的Font
属性:
// Gets the attributes for the property.
AttributeCollection attributes = TypeDescriptor.GetProperties(label1)["ForeColor"].Attributes;
//Find the "DefaultValue" attribute
DefaultValueAttribute myAttribute = (DefaultValueAttribute)attributes[typeof(DefaultValueAttribute)];
除了没有默认值属性(myAttribute
为空)
然后我意识到有AmbientValue
属性,这意味着属性的值来自控件的父级。
在控制之后,control.Parent
链会发现每个人都有一个AmbientValue
属性标记,一直到Form
。
[AmbientValue]
(无DefaultValue)
[AmbientValue]
(无DefaultValue)
null
那么我如何获得控件的Font
属性的默认值?
答案 0 :(得分:2)
如果你在谈论WinForms,我认为Control.DefaultFont属性应该有帮助。
答案 1 :(得分:1)
我的理解是'默认字体'是指直接指定的字体,而不是继承的环境字体。
在Control类中,有一个名为IsFontSet的内部方法。如果Font为null,它将返回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,因此如果方法名称发生更改,它的值将为null。使用try-catch,这样如果返回类型从bool更改为其他类型,代码将不会崩溃。