2007年10月19日金曜日

[.NET]自作コントロールのプロパティのシリアライズ

配列で且つとあるクラスの配列をコントロールのプロパティにする場合、そのクラスは、ISerializableをインプリメントする必要があります。そうすることにより、デザイナで設定したプロパティは、リソースのプロパティになります。VS.NET2005はこんなコードをはきます。

this.hoge1.Items = new xxx.yyy.HogeItem[] {
((xxx.yyy.HogeItem)(resources.GetObject("hoge1.Items"))),
((xxx.yyy.HogeItem)(resources.GetObject("hoge1.Items1"))),
((xxx.yyy.HogeItem)(resources.GetObject("hoge1.Items2")))};


リソースから取得した値をデシリアライズし、キャストしています。

ところがこのHogeItemに属性追加やアトリビュート変更をすると、この処理が失敗するらしく、デザイナの画面にエラーが表示時されてしまいます。(xxx.yyy.HogeItem[]をxxx.yyy.HogeItem[]にキャストできません。みたいなメッセージです。)
で、毎回プロパティを入力しなおしていたのですが、以下の手順で回避することが出来ます。

  1. VS.NETを再起動する。
  2. リビルドする
  3. VS.NETをもう一度再起動する。

同じような目にあっている人は試してみてください。なお、この現象は、プロジェクトをいくつかに分離していないと発生しないようです。

0 件のコメント: