- - PR -
継承されたフォームに貼り付けられたコンポーネントの取得方法
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-02-27 14:21
いつも参考にさせていただいております。
少し困っていることがあるので、投稿させていただきました。 チームメンバーが継承して使用できるフォームを作成しているのですが、 継承されたフォームに貼り付けられたタイマを取得したいのです。 (正確に言うと、タイマはフォームに「貼り付ける」ことはできませんが…) 具体的には、継承元フォームのForm#OnLoadメソッドで処理をしたいと思っています。 Form#Controlsプロパティで、ボタンなどのコントロールは取得できますが、 タイマのようなコンポーネントを取得する方法がわかりません。 環境はWindowsXP,VS2005,.NET2.0、言語はC#を使っています。 どなたかご教授いただければ幸いです。 [ メッセージ編集済み 編集者: 味噌汁まんぼう 編集日時 2008-02-27 14:24 ] | ||||
|
投稿日時: 2008-02-27 14:32
子Formに貼り付けたタイマーを親Formで使いたいっていうことですか?
| ||||
|
投稿日時: 2008-02-27 14:40
タイマーの変数をPublic or Protectedにすれば良いです。
それが嫌ならリフレクションを使用して見つけてください。 参考になればと思います。 | ||||
|
投稿日時: 2008-02-27 16:30
派生先は基底クラスを知っていますので、「Controlsから探し出す」という行為は不自然だと思います。 indigo-xさんの言われるようにアクセス修飾子を変更して直接アクセスするか、そのボタンを表す機能(仕様)レベルのProtectedなプロパティやフィールドを持つというほうがよいでしょう。 #OKボタンの名前がbuttonOkであろうとbuttonNextであろうと、OKButton プロパティを見ればよいとか。 規模や生産性の観点で一概には言えませんが 何でもアクセス可能にするより、いわゆるProtectedなメソッドなどで 派生先がどんなことをどんなタイミングでできるかを仕様として明示的に実装したほうがよいということもあります。 | ||||
|
投稿日時: 2008-02-28 13:18
☆ガルマ・ザビさん
ご回答ありがとうございます。 >子Formに貼り付けたタイマーを親Formで使いたいっていうことですか? そうです。 具体的には、 子Form(継承したフォーム)に貼り付けられたタイマーを、 親Form(継承元フォーム)で一律に停止できればと思っています。 ☆indigo-xさん ご回答ありがとうございます。 すいません、書き方が悪かったようで、 継承元フォームに貼り付けたタイマを、 継承したフォームで使用する方法を質問しているように、 捉えられていただいていると思います。 この逆がしたいのですが、その方法がわからず困っているところです。 ☆まどかさん ご回答ありがとうございます。 すいません、書き方が悪かったです。 まどかさんもindigo-xさんと同じように、 私の質問を捉えられていただいていると思います。 | ||||
|
投稿日時: 2008-02-28 13:31
解としては
で、参照できます。(無論、派生FormのTimerはアクセスできるレベル[public or internal]であること) でも・・・クラス継承の理念?概念?に反しています。 なぜ派生フォームのオブジェクトを派生元が意識しなければならないのでしょう。 派生フォームにて処理すれば良いのでは? と、思う次第であります。 [追記] 派生したフォーム全てに、Timerが存在するならば 派生元にTimerを用意しておくべきです。 [ メッセージ編集済み 編集者: くまっち 編集日時 2008-02-28 13:34 ] | ||||
|
投稿日時: 2008-02-28 13:50
こんな感じかな(多分、要望とは違いますが)
親に protected virtual Timer timer { get { return null; } } 子に protected override Timer timer { get { return timer1; } } 意味的にはくまっちさんと同じですが。。。。 多分、要望は不定のtimerを見つけたいと言う意味だと思うの で通常では無理です(リフレクションしかないと思います) | ||||
|
投稿日時: 2008-02-28 14:20
おもしろい設計ですね。 すべての派生クラスがタイマを実装するのなら、どうして基底クラスの方にタイマを実装しなんでしょうか? |
1|2|3
次のページへ»