【发布时间】:2011-01-03 20:31:01
【问题描述】:
如何在运行时将EditorAttribute(编辑器)添加到对象的属性中?
我有My.Settings.ExcludeFiles,它由设置设计器创建为Public Property ExcludedFiles() As Global.System.Collections.Specialized.StringCollection。通过属性网格编辑ExcludedFiles 时,“字符串集合编辑器”会生成“找不到类型'System.String' 的构造函数”运行时异常。
我无法更改ExcludeFiles 属性的属性,因为它们将在下次进行任何设置更改时被覆盖。因此,我必须在运行时附加/添加 Editor/EditorAttribute。
我想做的是在运行时添加StringCollectionEditor,如下所示作为设计时属性。
<Editor(GetType(StringCollectionEditor), GetType(UITypeEditor))> _
解决方案
方法#1
TypeDescriptor.AddAttributes( _
GetType(Specialized.StringCollection), _
New EditorAttribute( _
"System.Windows.Forms.Design.StringCollectionEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", _
GetType(System.Drawing.Design.UITypeEditor)))
您只需添加一次此属性,例如应用程序初始化。
方法#2
更灵活。见尼古拉斯凯迪拉克 在Adding Editor / EditorAttribute at Run-time (Dynamically) to an Object's Property 下方回答。它使用派生的 CustomTypeDescriptor 和 TypeDescriptionProvider 类。您只需添加一次提供程序,例如应用程序初始化。
【问题讨论】:
标签: winforms attributes propertygrid my.settings