DOBON.NET DOBON.NETプログラミング掲示板過去ログ

共通処理の実装

環境/言語:[WindowsXP]
分類:[.NET]

共通の処理の処理についてお聞きしたい事があります。

今、継承元のフォームがあり各画面で継承して画面を作成しています。継承元のフォームには、アナウンスを表示するラベルがあり、そのラベルには各画面のコントロール上にマウスが来たらコントロールの説明をアナウンスラベルに表示させようと思っています。

そこで、各画面の継承元は全て同じなので、このアナウンスラベルにアナウンス文字を設定するといった処理を共通処理にしようと思っております。

この様な共通の処理を実装するには、どの様な実装方法が在りますでしょうか?

色々なケースがあると思いますが、お勧めの実装方法などご教授して頂けないでしょうか?

宜しくお願い致します。
> そのラベルには各画面のコントロール上にマウスが来たらコントロールの説明をアナウンスラベルに表示させようと思っています。

この部分の設計により変わると思います。
継承元と派生先の役割をまず明確にしたほうがよいでしょう。
つまり
・マウスイベントの実装
・表示データの管理
・表示データの変更
・マウスイベント以外からの表示手段
などですかね。

「アナウンス」からは基本フォームに押し込められそうですけどね。
コントロール、メッセージおよび管理メソッドを実装したコレクションを基本フォームが公開し
派生先のLoadなどで設定するというのが考えられます。
■No15984に返信(ペケさんの記事)
引数にメッセージを渡せるイベントを定義して
イベントが起こったら引数のメッセージを
アナウンスラベルに設定するようにしておく。

各コントロールでは条件に応じて表示させたい
メッセージを引数にイベントを起こす。
こんなに早く返信頂きまして有難う御座います。

まず、自分の記述が曖昧過ぎたのでもう少し詳しく書かせて頂きます。
継承元のフォーム以外に、各使用するコントロール群(Button,TextBox,Label…)は
全て基底コントロールがあり、それを派生して各仕様ごとのコントロールとして作成しております。
ただし、アナウンスラベルについては基底フォームに埋め込んであります。

その各基底コントロール群には、フォーカスイベント時(Enter,Leave)やマウスイベント時(MouseMove,MouseLeave)にコントロールのアナウンス(例:"契約番号を入力して下さい")を表示させようと思っております。

このアナウンスを表示するラベルは、基底フォームでプロパティーとして追加させており、上記の記述した基底コントロールのイベントでそのプロパティーの操作をしようとしています。ここのプロパティーの操作するのが、初めに書いた共通処理の部分になります。

> コントロール、メッセージおよび管理メソッドを実装したコレクションを基本フォームが公開し
> 派生先のLoadなどで設定するというのが考えられます。

派生先のLoadなどで設定とはどのようにするのでしょうか?

なにぶん初心者なもので、説明不足、理解力不足が多々ありますが、宜しくお願いします。
  • 題名: Re[3]: 共通処理の実装
  • 著者: ペケ
  • 日時: 2006/05/25 11:12:53
  • ID: 15989
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
返信有難う御座います。

> 引数にメッセージを渡せるイベントを定義して
> イベントが起こったら引数のメッセージを
> アナウンスラベルに設定するようにしておく。
>
> 各コントロールでは条件に応じて表示させたい
> メッセージを引数にイベントを起こす。

イベントを作成して、コントロールのイベントと動的に結びつけると言う事でしょうか?今の希望と致しましては、共通処理を行うクラスをまとめるプロジェクトを作成しようと思っているのですが、イメージとしてはアナウンスを表示させる時にその共通メソッドを呼ぶといったような感じです。正直今の力だとそれしか考えつかなくて、他に良い方法などがあったら教えて頂きたいです。
継承関係にあるのですから、基底クラスにprotectedなものを用意すれば派生クラスから見れるようになります。極端な話、アナウンスラベルをprotectedにすれば派生クラスからそのまま見えます。
アナウンスラベルを操作する部分を共通化したいということですので、その部分をprotectedなメソッドとして作成してしまうだけではないでしょうか?
情報や手段が何に依存するか(誰が管理者か)を意識してみてください。
明らかなのは、
ラベルは基底フォーム、メッセージ内容はコントロール
です。

一番簡単なのは、trapemiyaさんのおっしゃるProtectedメソッドを基底フォームに実装することでしょう。
Protected Sub SetAnnounceText(ByVal Text As String)
_AnnounceLabel.Text = Text
End Sub

処理が「ラベルの設定」だけですまなくなるとしたら、「ラベルの設定」を分離する必要も出てくるでしょう。
つまり、「ラベルを設定する」を「一連の処理をする」に抽象化して、トリガーイベントなどでその「要求」を基底フォームに通知することになります。
この場合、一連の処理を基底フォームに閉じ込めることになり、
したがって、そのための情報も基底フォームに持つ(渡す)ことになります。

>>コントロール、メッセージおよび管理メソッドを実装したコレクションを基本フォームが公開し
>>派生先のLoadなどで設定するというのが考えられます。
>
> 派生先のLoadなどで設定とはどのようにするのでしょうか?

派生先のLoadイベントに書くということですが。。。

上記はメッセージが派生フォームの依存情報という観点から、
器(インターフェース)を基底フォームに、実際の情報の設定を派生フォームで初期設定する
ということで書きました。
  • 題名: Re[2]: 共通処理の実装
  • 著者: ペケ
  • 日時: 2006/05/25 12:37:03
  • ID: 15993
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
有難う御座います。

その様に実装をしてみたいと思います!
本当に有難う御座いました。
解決済み!
  • 題名: Re[4]: 共通処理の実装
  • 著者: ペケ
  • 日時: 2006/05/25 12:38:57
  • ID: 15994
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
有難う御座います!

Loadイベントなどに設定するという事もとてもよく理解出来ました。
本当に有難う御座いました。
また何かありましたら宜しくお願い致します。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板