またはWinFormsデザイナーでコレクションを編集して保持する最も簡単な方法は何ですか?decimal[]
List<string>
最初の問題は、パラメーターなしのコンストラクターが必要なことです。そこで、単純なラッパー クラスを作成しましたMyObject<T>
。
[Serializable()]
public class MyObject
{
public MyObject() {}
public decimal Value {get; set;}
}
コンテナー クラスで、プロパティを定義し、それに 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; }
}
}
ここで、stackoverflow の回答と codeproject.com の記事に基づいて、あらゆる種類のことを試しました。
- decimal[] フィールドを持つ ArrayEditor
- MyObject のカスタム TypeConverter
- リストのカスタム コレクション クラス
- コンテナー クラスの読み取り/書き込みプロパティ
- EditValue を実装したカスタム エディター
- MyObject の IComponent インターフェイスを実装する
- DesignerSerializationVisibility(DesignerSerializationVisibility.Content) を追加してみました
私はそれを機能させたので、
- コレクションは DesignMode で表示されます
- コレクションは DesignMode で編集可能です
- DesignMode で新しいアイテムをコレクションに追加できます
ただし、フォームを保存して閉じ、再度開くと、コレクション内の要素は保持されません。
編集: Hans は私にいくつかのヒントをくれました (彼のコメントはどういうわけか空白になりました)。私は彼のガイドラインに従い、上記のソースを更新しましたが、残念ながらまだ動作しません...