在运行时读取 .NET 控件 "Design" 属性
Read .NET Control "Design" properties at runtime
如何在运行时读取 .NET Windows.Forms "Design" 属性? (我认为这一定是可能的,因为设计师等正在使用它们。)"Design" 属性是 GenerateMember
、Locked
和 Modifiers
。
例如。我想在运行时阅读 Modifiers
属性。如果控件被标记为 "public",我将在其上附加一个工具提示。或其他。
Locked
属性 由 ControlDesigner
添加,Modifiers
和 GenerateMember
仅在设计时由 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;
}
如何在运行时读取 .NET Windows.Forms "Design" 属性? (我认为这一定是可能的,因为设计师等正在使用它们。)"Design" 属性是 GenerateMember
、Locked
和 Modifiers
。
例如。我想在运行时阅读 Modifiers
属性。如果控件被标记为 "public",我将在其上附加一个工具提示。或其他。
Locked
属性 由 ControlDesigner
添加,Modifiers
和 GenerateMember
仅在设计时由 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;
}