C# “读取.NET控件”;“设计”;运行时的属性

C# “读取.NET控件”;“设计”;运行时的属性,c#,.net,winforms,windows-forms-designer,C#,.net,Winforms,Windows Forms Designer,如何在运行时读取.NET Windows.Forms“Design”属性?(我认为这是可能的,因为设计师等都在使用它们。)“设计”属性是生成成员、锁定的和修改器 我想在运行时读取修饰符属性。如果控件标记为“public”,我将向其附加工具提示。或者随便什么。锁定的属性是由控制设计器添加的,修改器和生成成员是由修改器扩展提供程序在设计时添加的 它们不是控件的真实属性,它们只对设计器支持有用,默认序列化程序不会生成关于它们的任何代码,因此在运行时无法看到它们 例如,Locked对运行时没有任何意义

如何在运行时读取.NET Windows.Forms“Design”属性?(我认为这是可能的,因为设计师等都在使用它们。)“设计”属性是
生成成员
锁定的
修改器


我想在运行时读取
修饰符
属性。如果控件标记为“public”,我将向其附加工具提示。或者随便什么。

锁定的
属性是由
控制设计器
添加的,
修改器
生成成员
是由
修改器扩展提供程序
在设计时添加的


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

例如,
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;
}

它们不是控件的真实属性。因此,您在运行时无法看到它们。我想有必要编写一个自定义设计器,继承自
ControlDesigner
(使用
System.Windows.Forms.Design
),然后启动“非交互式设计会话”(不知道如何做,因此这是一个注释)。另外,不知道为什么要这样做:)?它们是由控件设计器实现的。因此在运行时不存在。像这样的工具提示是没有用的,程序员需要输入有用的文本。@HansPassant没有理解你的意思:\。我有公众的也有非公众的。某些控件生成了成员,该成员可以是公共的,也可以是非公共的。