- - PR -
CheckBoxのCheckedとControlのEnabled連動
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-06-05 23:45
Visual Studio 2005開発環境の検索ダイアログで、検索オプションの条件チェックボックスと下のコンボボックスのEnabledが連動するように、あるチェックボックスのチェック状態と連動して他のコントロールのEnabledを自動で切り替えてくれるようなユーザーコンポーネントを作ろうとしています。
最初は新規クラスライブラリプロジェクトを作ってSystem.ComponentModel.Componentを継承し、CheckBoxとControlを1セットだけ登録できるようにしてみてうまくいったのですが、欲が出てきてフォームに1個コンポーネントを貼り付けただけで複数セットを管理したいなぁ〜と思うようになりました。 そこで(ちょっと長くて申し訳ないのですが)以下のようにCollectionBaseを継承した独自コレクションと、CheckBoxとControlを1セットで管理&CheckBoxのチェック状態とControlのEnabledを連動させる独自クラスを作ってみました。
テスト用フォームにこのコンポーネントとCheckBoxとTextBoxを貼り付けてForm_Load内に直接以下のようなコードを記述したら期待通りの動作をしてくれたのですが
デザイナ上でコレクションエディタを使ってCheckBoxとTextBoxを登録すると、InitializeComponent内に自動生成されるコードが以下のように変な状態になっていました。
これはどこがまずいのでしょうか? とりあえず簡単に動作確認…という段階でEnabledControllerCollectionにはItemプロパティとAddメソッドしか実装していないのですが、その辺に原因があるのか、あるいは根本的に何か間違っていますか? | ||||||||||||
|
投稿日時: 2006-06-06 15:58
AddRangeを実装していないからかな? EnabledControllerItemCollectionは、 Inherits Generic.List(Of EnabledControllerItem) でもいいような気がします。(実装無し) #デザイナとの絡みはわかりませんm(_ _)m #提示コード内のItemや本体のItemsはReadOnlyにしときましょう。 | ||||||||||||
|
投稿日時: 2006-06-06 18:25
結果としては残念ながらAddRangeを実装してもInitializeComponent内では同様に頭にNewがついてしまい、うまく行きませんでした。 それから色々検索していたところDesignerSerializationVisibilityという属性を使っているものを発見し、
上記のように適用してみたら、デザイナからコレクションエディタで追加した場合にもInitializeComponent内に以下のように生成されるようになりました。(仕組みはまだよくわかっていませんが…)
EnabledControllerItemCollectionに関してはご指摘いただいた通りジェネリック対応クラスを継承するようにしたのですっきりしました。 と、ココまで試行錯誤してきて「CheckBoxとControlを複数セット管理するコンポーネント」とするより単に関連Controlを登録できる拡張CheckBoxとすればよかったな、なんてふと思ったり… それはさておきご回答&ご助言ありがとうございました |
1