2


0

プロパティグリッドを使用して名前と値のペアを編集するアプリケーションに取り組んでいます。 私のクラスファイルのプロパティのいくつかはListDictionaryコレクションです。 コレクションエディタを実行時に機能させるプロパティ宣言で適用できるEditor属性はありますか? そうでない場合、実行時に使用するためにComponentModel.Design.CollectionEditorから継承することは可能ですか? コレクションの値を追加、削除、編集できるようにする必要があります。 ありがとう、Terry

2 Answer


3


_ _ CollectionEditorで正常に永続化するには、コレクションが満たすべき3つの要件があります。

  1. まず、コレクションはIListインターフェイスを実装する必要があります(継承 ほとんどの場合、System.Collections.CollectionBaseが最適なオプションです)。

  2. 第二に、それはインデクサー(VB.NETのアイテム)プロパティを持っている必要があります。 のタイプ このプロパティは、CollectionEditorがコレクションに追加するインスタンスのデフォルトタイプを決定するために使用されます。 これがどのように機能するかをよりよく理解するために、CustomCollectionEditorFormのGetItemType()関数を見てください。protected virtual Type GetItemType(IList coll)\ {PropertyInfo pi = coll.GetType()。GetProperty( "Item"、new Type [] \ { typeof(int)});戻りpi.PropertyType}

  3. 第三に、コレクションクラスは、どちらかまたは両方を実装する必要があります 次のメソッド:AddおよびAddRange。 IListインターフェースにはAddメンバーがあり、CollectionBaseにはIListが実装されていますが、CollectionBaseにはIListのAddメンバーの明示的なメンバー実装が宣言されているので、コレクションにはAddメソッドを実装する必要があります。 デザイナーは、実装した方法に従ってコレクションをシリアル化します。 両方を実装した場合は、AddRangeが優先されます。 _ _

この記事では、コレクションをプロパティ・グリッドに実装するために必要なすべてを見つけることができます。


1


私はこの記事があなたが必要とするものを説明すると思います: CollectionEditorでコレクションを編集し永続化する方法