- PR -

複数のカスタムコントロールで共通のコードをまとめたい

投稿者投稿内容
ume
会議室デビュー日: 2007/10/25
投稿数: 6
投稿日時: 2007-10-26 11:38
お世話になります。

現在VS2005(VB.NET)で
・フォーカス取得時に背景色を変更する。
・Enter時に次のコントロールへフォーカスを移動する。
等の機能を追加したカスタムコントロールを作成しています。

複数のカスタムコントロールに同じコード
(オーバーロードされたイベントやプロパティなど)を記述しているのですが
それを一箇所にまとめる良い方法がないでしょうか?

ご存知の方がおられましたらご教示願います。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2007-10-26 12:44
引用:

umeさんの書き込み (2007-10-26 11:38) より:

複数のカスタムコントロールに同じコード
(オーバーロードされたイベントやプロパティなど)を記述しているのですが
それを一箇所にまとめる良い方法がないでしょうか?



そういった処理をヘルパークラスにまとめ、イベントやプロパティからは、ヘルパークラスのメソッドを呼ぶというのはいかがでしょうか。
GENZO
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 111
お住まい・勤務地: 名古屋
投稿日時: 2007-10-26 12:50
色を変えるコンポーネントを用意してはどうでしょうか?
 ・Componentから継承したクラスを作成する
 ・ISupportInitializeをインプリメントする
 ・Formをメンバー変数にする

で、
ISupportInitialize.EndInitまたはBeginInitで、Formの持っている
色を変えたいコントロール全部にEnter,Leaveのイベントを設定する。
 ・Enter BackColorを設定する
 ・Leave BackColorを元に戻す

コンパイルが通ったら対象のformにツールボックスからドロップ。
次に、プロパティのFormを指定。

フォーカスの方はちょっとわかりませんが同じような方法が
取れるかもしれません。
まさる
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 59
お住まい・勤務地: 越後の中ほど
投稿日時: 2007-10-26 13:00
コンポーネントを用いて解決する方法について、以前菊池さんがblogに書いてました。
http://www.ailight.jp/blog/kazuk/archive/2007/07/10/13944.aspx
ume
会議室デビュー日: 2007/10/25
投稿数: 6
投稿日時: 2007-10-26 13:31
返信ありがとうございます。

勉強不足で、ヘルパークラスが理解できておりませんので
これから調べてみようと思います。

その後、ヘルパークラスで対応するか、コンポーネントを用いて対応するか
を検討したいと思います。

結論がでましたらご報告いたします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-10-26 16:27
私の場合、拡張コントロールの外に出して共通化を試みようとしたことがないです。 機能として実装したいだけならコンポーネントを作成しますが、拡張コントロールありきの話なら敢えて分離せず重複したコードを書きます。

業務アプリケーションだとその方が融通が利くという理由もありますが、分離したい理由がないというのが主な理由です。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ume
会議室デビュー日: 2007/10/25
投稿数: 6
投稿日時: 2007-10-26 17:57
良い方法なのか悪い方法なのかわかりませんが、
以下の方法でイベントの共通化をしてみました。
(悪い方法であればご指摘ください。)

@共通のイベントハンドラを記述したクラスを作成する。
Aカスタムコントロールのコンストラクタでカスタムコントロールのイベントに
 @のイベントハンドラを関連付ける。

これで動きは問題ないみたいです。

プロパティの共通化はまだ試行錯誤している途中です。

nakaP
大ベテラン
会議室デビュー日: 2005/09/27
投稿数: 138
お住まい・勤務地: 高知
投稿日時: 2007-10-27 00:37
敢えて共通化するのであれば、私なら以下の方法を取るかと思います。
たぶん実際には使える場面は少ないと思いますし、しないと思います。
コード:

OriginalControl
|
ExtendControlBase

├――――――――――┬――――――――┐
│ │ │
ExtendControl1 ExtendControl2 ExtendControl3


拡張コントロールの基本クラスを作り、そこからさらに派生した拡張コントロールを作ります。

[追記]
これはあまり良くない作り方です。
真似しないように・・・orzz

[ メッセージ編集済み 編集者: J.J. 編集日時 2007-10-29 15:17 ]

スキルアップ/キャリアアップ(JOB@IT)