- - PR -
複数のカスタムコントロールで共通のコードをまとめたい
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-10-26 11:38
お世話になります。
現在VS2005(VB.NET)で ・フォーカス取得時に背景色を変更する。 ・Enter時に次のコントロールへフォーカスを移動する。 等の機能を追加したカスタムコントロールを作成しています。 複数のカスタムコントロールに同じコード (オーバーロードされたイベントやプロパティなど)を記述しているのですが それを一箇所にまとめる良い方法がないでしょうか? ご存知の方がおられましたらご教示願います。 | ||||
|
投稿日時: 2007-10-26 12:44
そういった処理をヘルパークラスにまとめ、イベントやプロパティからは、ヘルパークラスのメソッドを呼ぶというのはいかがでしょうか。 | ||||
|
投稿日時: 2007-10-26 12:50
色を変えるコンポーネントを用意してはどうでしょうか?
・Componentから継承したクラスを作成する ・ISupportInitializeをインプリメントする ・Formをメンバー変数にする で、 ISupportInitialize.EndInitまたはBeginInitで、Formの持っている 色を変えたいコントロール全部にEnter,Leaveのイベントを設定する。 ・Enter BackColorを設定する ・Leave BackColorを元に戻す コンパイルが通ったら対象のformにツールボックスからドロップ。 次に、プロパティのFormを指定。 フォーカスの方はちょっとわかりませんが同じような方法が 取れるかもしれません。 | ||||
|
投稿日時: 2007-10-26 13:00
コンポーネントを用いて解決する方法について、以前菊池さんがblogに書いてました。
http://www.ailight.jp/blog/kazuk/archive/2007/07/10/13944.aspx | ||||
|
投稿日時: 2007-10-26 13:31
返信ありがとうございます。
勉強不足で、ヘルパークラスが理解できておりませんので これから調べてみようと思います。 その後、ヘルパークラスで対応するか、コンポーネントを用いて対応するか を検討したいと思います。 結論がでましたらご報告いたします。 | ||||
|
投稿日時: 2007-10-26 16:27
私の場合、拡張コントロールの外に出して共通化を試みようとしたことがないです。 機能として実装したいだけならコンポーネントを作成しますが、拡張コントロールありきの話なら敢えて分離せず重複したコードを書きます。
業務アプリケーションだとその方が融通が利くという理由もありますが、分離したい理由がないというのが主な理由です。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-10-26 17:57
良い方法なのか悪い方法なのかわかりませんが、
以下の方法でイベントの共通化をしてみました。 (悪い方法であればご指摘ください。) @共通のイベントハンドラを記述したクラスを作成する。 Aカスタムコントロールのコンストラクタでカスタムコントロールのイベントに @のイベントハンドラを関連付ける。 これで動きは問題ないみたいです。 プロパティの共通化はまだ試行錯誤している途中です。 | ||||
|
投稿日時: 2007-10-27 00:37
敢えて共通化するのであれば、私なら以下の方法を取るかと思います。
たぶん実際には使える場面は少ないと思いますし、しないと思います。
拡張コントロールの基本クラスを作り、そこからさらに派生した拡張コントロールを作ります。 [追記] これはあまり良くない作り方です。 真似しないように・・・orzz [ メッセージ編集済み 編集者: J.J. 編集日時 2007-10-29 15:17 ] |