実行時にオブジェクトのプロパティに EditorAttribute (Editor) を追加する方法は?
私はMy.Settings.ExcludeFiles
、設定デザイナーによって として作成されたを持っていますPublic Property ExcludedFiles() As Global.System.Collections.Specialized.StringCollection
。プロパティ グリッドを介して編集する場合ExcludedFiles
、"String Collection Editor" は "Constructor on type 'System.String' not found" 実行時例外を生成します。
プロパティの属性は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)))
この属性を追加する必要があるのは、アプリケーションの初期化など、1 回だけです。
方法 2
より柔軟に。以下の Nicolas Cadilhac の回答を、実行時に (動的に) Editor / EditorAttribute をオブジェクトのプロパティに追加する で参照してください。派生した CustomTypeDescriptor および TypeDescriptionProvider クラスを使用します。アプリケーションの初期化など、プロバイダーを追加する必要があるのは 1 回だけです。