Hatena::ブログ(Diary)

無理なものは無理 このページをアンテナに追加

2009-05-12

[]ユーザコントロールの抽象化

C#でユーザコントロールを作成する際に、抽象クラスとして作成し、それを派生させてクラスを作成しようと思いました。

で、やってみますと、抽象クラスがデザイナで表示出来ない。これは実態が無いので当然でしょう。

だけど、それを継承したクラスまでデザイナで表示出来ないのはどういう事!?


調べて見た所、MSDNの方で

このエラーは、デザイナに渡されたオブジェクトの基本クラスが抽象クラスであるために発生しました。抽象クラスは使用できません。

と、しっかり書いてありました。抽象クラスから派生したものではデザイナでは表示できませんよ、との事。


なんだか納得いかないので、もう少しためしてみた所、この派生クラスをさらに派生させるときちんとデザイナでも表示されました。

それで問題ないなら、元の派生クラスでも表示して欲しいですよね。。。

ただ、元の派生クラスでも、デザイナで直接編集は出来ないだけど、コントロールとして、別コントロールに貼り付けたりは出来るんですよね。扱いがややこしいです。

どれくらいの用途があるかはわかりませんが、ユーザコントロールを抽象化した上で、そのユーザコントロール自身をデザイナでも編集したい時は、クラス設計的にいびつだが、無意味に一段、クラスを派生させてやる必要がありそう。


ユーザコントロールの抽象化まとめ

  • 抽象化したユーザコントロールクラス(abstractControl)は当然ながらデザイナで表示出来ない。
  • また、それを派生させたユーザコントロールクラス(abstractControl→userControlBase)に関しても同様である。
    • デザイナで編集は出来ないが、コントロールとして使用して、別コントロールへの追加等は可能。
  • 派生させたユーザコントロールクラスをさらに派生させた場合、(abstractControl→userControlBase→userControlA)はデザイナで編集する事が出来る。
  • カスタムコントロール*1に関しては、そもそも描画を自分で行う必要があり、デザイナで表示させる事が出来ないので、2段階の派生の必要はない。

実際にこういうコントロールを作る必要が出来たら、クラスを一つ余分に追加するか、設計をかえるかは考え物ですね。

*1:自作のコントロールという意味ではなく、Controlを継承したもの

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/bonvivant/20090512/1242060941