如何获取控件字体的默认值?

时间:2011-12-06 22:00:51

标签: c# .net visual-studio

我正在尝试获取控件字体的默认值,以便我可以确定它当前是否为默认值。

如何获取控件字体的默认值?


尝试通过反思获取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

  • label1 [AmbientValue](无DefaultValue)
    • form1 [AmbientValue](无DefaultValue)
      • null

那么我如何获得控件的Font属性的默认值?

2 个答案:

答案 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更改为其他类型,代码将不会崩溃。