在运行时读取.NET Control“Design”属性

时间:2017-11-01 09:47:40

标签: c# .net winforms windows-forms-designer

如何在运行时读出.NET Windows.Forms“设计”属性? (我认为它必须是可能的,因为设计师等正在使用它们。)“设计”属性是GenerateMemberLockedModifiers

EG。我想在运行时读取Modifiers属性。如果控件被标记为“公共”,我将附加一个工具提示。或者其他什么。

1 个答案:

答案 0 :(得分:2)

Locked属性由ControlDesigner添加,ModifiersGenerateMember仅在设计时由ModifiersExtenderProvider添加。

它们不是控件的真正属性,它们只对设计器支持很有用,默认的序列化程序不会生成任何关于它们的代码,因此您无法在运行时看到它们。

例如Locked对运行时没有任何意义。

关于知道控件是否有成员以及成员是否公开,您可以依靠反思。

示例

public bool IsMemberGenerated(string name)
{
    var field = this.GetType().GetField(name, System.Reflection.BindingFlags.Public |
        System.Reflection.BindingFlags.NonPublic |
        System.Reflection.BindingFlags.Instance);
    return field != null;
}