- PR -

継承されたフォームに貼り付けられたコンポーネントの取得方法

投稿者投稿内容
takacini
常連さん
会議室デビュー日: 2005/12/27
投稿数: 24
お住まい・勤務地: 東京都
投稿日時: 2008-02-28 19:58
イベントを使ってもいけそうな気がします。

親Form側:
 「タイマーを止めろ」イベントを定義する
 Loadイベントハンドラ内で「タイマーを止めろ」イベントをRaiseする

子Form側:
 「タイマーを止めろ」イベントハンドラを実装する
 その中で止めたいタイマーをすべて処理する
 タイマーを持たない子Formはイベントハンドラを書かなければ良い

すでに子Formが何十個も実装済みだと修正が大変そうですけどね。

基底クラスが派生クラスのことを知っていなければならないという実装は
やはりかなりいびつに感じます。

#質問の意味を取り違えていたらごめんなさい。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2008-02-28 20:52
引用:

そうですね、継承クラス作成者に全く意識させないようにしたいとなると、
リフレクションしか方法がないですね。



既出ですが、それだと、派生側で別の目的で別のタイマを追加したときなどに破綻しませんか?

どっちがどのタイマか、基底クラスでは判定不可のはず。
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-02-28 21:23
使用目的を考えず全てのタイマー(Windows Timer)を止めるのが
目的であればWndProcあたりをオーバーライドしてWM_TIMERを
すべて捨てる方が簡単かもしれません。

オブジェクト指向の基底・派生等を考えるより機械的に考えた方が
合理的と思います。
ガルマ・ザビ
ベテラン
会議室デビュー日: 2007/06/07
投稿数: 55
お住まい・勤務地: ジオン公国
投稿日時: 2008-02-29 09:12
引用:

渋木宏明(ひどり)さんの書き込み (2008-02-28 20:52) より:
引用:

そうですね、継承クラス作成者に全く意識させないようにしたいとなると、
リフレクションしか方法がないですね。



既出ですが、それだと、派生側で別の目的で別のタイマを追加したときなどに破綻しませんか?

どっちがどのタイマか、基底クラスでは判定不可のはず。



破綻するか否かは私には判断できません。
なぜなら、目的なんて関係なく、とにかくTimerを取りたいのかもしれないからです。

味噌汁まんぼうさんに聞かないとそこは分かりませんが、
ただ先に「思っていた動作が出来ました」とあるので、本件についてだけ言えば、
破綻していなかったのではないでしょうか?
味噌汁まんぼう
会議室デビュー日: 2008/02/27
投稿数: 14
投稿日時: 2008-02-29 12:02
☆takaciniさん
ご回答ありがとうございます。
イベントを使ったやり方というのは思いつきませんでした。
今後の参考にさせていただきます。

☆渋木宏明さん
ご回答ありがとうございます。

>派生側で別の目的で別のタイマを追加したときなどに破綻しませんか?
>どっちがどのタイマか、基底クラスでは判定不可のはず。
たしかに私の示したサンプルコードでは基底クラスのタイマか派生側のタイマか区別できません。
今回は、どちらのタイマであるかに関係なく、一律に処理をしたかったので、
区別は不要としていました。

確かに、派生側が、基底クラスに処理されたくないタイマを使いたい、
と思った場合は、このやり方ではだめだと思います。
が、とりあえず今回はその必要はなかったので、そこまでは検討しておりません。

☆indigo-xさん
ご回答ありがとうございます。
なるほど、より根幹で処理をするというのも手ですね。
これも思いつきませんでした。
今後の参考にさせていただきます。

☆ガルマ・ザビ
ご回答ありがとうございます。

>目的なんて関係なく、とにかくTimerを取りたいのかもしれないからです。
そうですね。今回はこの仕様で考えておりました。

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