在运行时读取 .NET 控件 "Design" 属性

Read .NET Control "Design" properties at runtime

如何在运行时读取 .NET Windows.Forms "Design" 属性? (我认为这一定是可能的,因为设计师等正在使用它们。)"Design" 属性是 GenerateMemberLockedModifiers

例如。我想在运行时阅读 Modifiers 属性。如果控件被标记为 "public",我将在其上附加一个工具提示。或其他。

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

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

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

关于控件是否有成员,成员是否public,可以靠反射

例子

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;
}