編集する最も簡単な方法は何ですかのようなコレクションは、WinFormsデザイナーのdecimal[]
またはList<string>
のようなコレクションですか?DesignModeでコレクションを編集する最も簡単な方法は?
第1の問題は、パラメータのないコンストラクタが必要であることです。だから私は、単純なラッパークラスを作った: 我々はプロパティを定義し、追加のコンテナクラスで
[Serializable()]
public class MyObject
{
public MyObject() {}
public decimal Value {get; set;}
}
を(いくつかの点で、これはMyObject<T>
ようなものだったが、リサイズのdesignercodeジェネレータはそれを処理する方法を知りませんでした)それにCollectionEditor属性:
public class MyContainer
{
private List<MyObject> _col = new List<MyObject>();
[Editor(typeof(CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))]
public List<MyObject> Collection
{
get { return _col; }
set { _col = value; }
}
}
は、今私はcodeproject.com上のstackoverflowのとarticlessに、ここでの回答に基づいて、あらゆる種類のものを試してみました:
- 一覧
- 読む/ MyObjectに ためIComponentインターフェイスを実装EditValue
- の実装でコンテナクラス
- カスタムエディタにプロパティを書くためのMyObjectに
- カスタムコレクションクラスの小数点[]フィールド
- カスタムのTypeConverterでArrayEditor (DesignerSerializationVisibility.Content)
DesignerSerializationVisibilityを追加しようとした
- こと
- 新しいアイテムがしかしのdesignMode
にコレクションに追加することができ、それが動作するように手に入れましたフォームを保存、終了、再オープンすることによって、コレクション内の要素は永続化されません。
編集: ハンスは私にいくつかのヒントを与えました(彼のコメントは何とか無効になりました)。私は彼のガイドラインに従い、上記のソースを更新しましたが残念ながらまだ動作しません。
グレート!それは動作します:) 私は好きだったCollectionEditorではありませんが、私はReflectorを起動し、私の実装で間違っていたことを確かめます。 – Laoujin