- 題名: クラスオブジェクトを返すプロパティのデザイナ上での設定
- 日時: 2012/09/14 10:38:31
- ID: 30931
- この記事の返信元:
- (なし)
- この記事への返信:
- [30934] Re[1]: クラスオブジェクトを返すプロパティのデザイナ上での設定2012/09/14 12:57:33
- ツリーを表示
■No30931に返信(月夜見命さんの記事)
> 今回、情報を保持するだけのクラス(仮にTestInfoとします)を作り、
> これのインスタンスを返すプロパティを持つコントロール
> (仮にTestControlとします)を作りました。
その情報は ReadOnly では無く、編集可能にしたいという事でしょうか?
> コード上からはこのプロパティ自体に
> 代入されたくないのでどうしようか悩み中です。
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public TestInfo TestInfo
{
get { return _info; }
}
> _pos = 0.5;
「_pos = 0.5f;」にしないと。
> public TestControl
> : base()
「public TestControl()」あるいは「public TestControl() : base()」では?
分類:[.NET]
2012/09/14(Fri) 10:38:53 編集(投稿者) :OS = Windows 7 Home Premium(64bit) :IDE = Visual Studio Premium 2012 :Language = C#, VB, DelphiPrism(Oxygene for .NET) :.NET = .NET Framework 4 Client Profile お世話になっております。 今回、情報を保持するだけのクラス(仮にTestInfoとします)を作り、 これのインスタンスを返すプロパティを持つコントロール (仮にTestControlとします)を作りました。 このプロパティにはTypeConverter属性がついており ExpandableObjectConverterが指定されています。また、getしかありません。 TestInfoのインスタンスはTestControlのコンストラクタ内で生成します。 [TypeConverter(typeof(ExpandableObjectConverter))] class TestInfo { private Color _color; private float _pos; public TestInfo() { _color = Color.White; _pos = 0.5; } [DefaultValue(typeof(Color), "White")] public Color Color { get { return _color; } set { _color = value; } } [DefaultValue(0.5f)] public float Position { get { return _pos; } set { _pos = value; } } } class TestControl : Button { private TestInfo _info; public TestControl : base() { _info = new TestInfo(); } public TestInfo TestInfo { get { return _info; } } } この状態でデザイナでTestControlを設置すると正常にTestInfoが展開されて 各メンバが見えるのですが、値を変更しても戻ってしまいます。 setを付加するとできるようになったことから、おそらくデザイナ自動生成では TestInfoの新しいインスタンスを生成してTestControlのTestInfoプロパティに 代入するようなコードになってると思うのですが、コード上からはこのプロパティ自体に 代入されたくないのでどうしようか悩み中です。 setの中でNotSupportedExceptionを投げてやろうかと思いましたが それではデザイナによるコードでも例外となるのでどうしようかなと… (デザイナ生成コードでの設定かどうかを判定する方法があったようななかったような…) 以上よろしくお願いします