プロパティ グリッドを使用して名前と値のペアを編集するアプリケーションに取り組んでいます。私のクラス ファイルのプロパティの一部は、ListDictionary コレクションです。Collection Editor を実行時に動作させるプロパティ宣言で適用できる Editor 属性はありますか? そうでない場合、実行時に使用するために ComponentModel.Design.CollectionEditor から継承することは可能ですか? コレクションの値を追加、削除、編集できる必要があります。どうもありがとう、テリー
1 に答える
codeproject の記事から [ http://www.codeproject.com/KB/cs/dzcollectioneditor.aspx][1]
CollectionEditor で正常に永続化するには、コレクションが満たさなければならない 3 つの要件があります。
- まず、コレクションは IList インターフェイスを実装する必要があります (ほとんどの場合、System.Collections.CollectionBase からの継承が最適なオプションです)。
次に、Indexer (VB.NET では Item) プロパティが必要です。このプロパティのタイプは CollectionEditor によって使用され、コレクションに追加されるインスタンスのデフォルト タイプが決定されます。
これがどのように機能するかをよりよく理解するには、CustomCollectionEditorForm の GetItemType() 関数を見てください。
protected virtual Type GetItemType(IList coll) { PropertyInfo pi= coll.GetType().GetProperty("Item", new Type[]{typeof(int)}); return pi.PropertyType }
第 3 に、コレクション クラスは、Add と AddRange のいずれかまたは両方のメソッドを実装する必要があります。IList インターフェイスには Add メンバーがあり、CollectionBase は IList を実装していますが、CollectionBase が IList の Add メンバーの明示的なメンバー実装を宣言していることを考えると、コレクションに Add メソッドを実装する必要があります。デザイナーは、実装したメソッドに従ってコレクションをシリアル化します。両方を実装している場合は、AddRange が優先されます。
この記事では、コレクションをプロパティ グリッドに実装するために必要なすべてを見つけることができます。