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