- - PR -
[VB.NET] 親クラス(Form)のイベントに対しOverridesは可能?
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-05-16 21:01
もしかして、できないのでは?
と思い、質問させて頂きました。 初めてUpしますが、読みずらい点はご容赦下さい。 ■ やりたいこと 何十種類とあるクライアントアプリの作成にて、例えば「終了ボタン」等は、 9割以上、同じ処理。だが、1割に満たないパターンは別の処理を行いたい。 そこで、親クラスのイベントのOverridesです。これをやりたい。 親クラス・・・Form上にButtonが1つ。 Public Overridable Sub Button1_Click _ (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MessageBox.Show("AAA") End Sub 子クラス・・・Form毎継承(Inherits 親フォームクラス)し、Button1_Click をOverridesする。 Public Overrides Sub Button1_Click _ (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MessageBox.Show("BBB") End Sub と、したが何だかコンパイルエラーとなってしまいます。 親クラスのButtonObjectはPrivateだよ。と言っている様なのですが・・・。 ■ 回避方法 もしOverridesできないのであれば、 以下でとりあえず、対応しようと考えたのですが、如何でしょうか? 親クラス・・・ Private Sub Button1_Click _ (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Call BASECLASS_Button1_Click(sender, e) End Sub Public Overridable Sub BASECLASS_Button1_Click _ (ByVal sender As System.Object, ByVal e As System.EventArgs) MessageBox.Show("AAA") End Sub 子クラス・・・ Public Overrides Sub BASECLASS_Button1_Click _ (ByVal sender As System.Object, ByVal e As System.EventArgs) MessageBox.Show("BBB") End Sub とりあえずは、動くのですが・・・。(ちょっと気持ち悪いコードですね) ■ 背景・まとめ Formは全て親クラスからの継承クラスを想定しています。 よって、万が一の逃げの処理の為、 Overridesできる方法を親クラスや、クラス間設計に保持しておきたいのです。 もっと良い方法、慣例があれば、教えてください。 実は、オブジェクト指向は初めてなんです。関数型しかやってません。 それとも設計手法や、解決策の方向性が全くダメダメでしょうか? 宜しくお願いします。 | ||||
|
投稿日時: 2005-05-16 21:48
コンパイラの警告通り、スコープの問題ではないでしょうか? _________________ IEEE-CSDP 2004-2007 | ||||
|
投稿日時: 2005-05-16 22:13
オーバーライドしているわけですから、子クラスのButton1_Click()にはHandlesは不要ですよね。
あと「イベントのOverrides」という表現は正確ではありませんね。言わんとしている事は分かりますけど。 | ||||
|
投稿日時: 2005-05-17 01:20
On〜メソッドを調べましょう。
(Controlクラスから継承されているイベント発火をラップしたメソッド群です) --------- ↑思いっきり勘違いしてました。はずした内容なので無視してください。 恥ずかしい。。。 [ メッセージ編集済み 編集者: よねKEN 編集日時 2005-05-22 18:05 ] | ||||
|
投稿日時: 2005-05-17 09:30
む? Button1のClickイベントはフォームのイベントではないのでOn〜はないですよね。 Buttonを継承したクラスを作るという意味かな・・・ | ||||
|
投稿日時: 2005-05-17 09:35
一郎様。
仰るとおりでした。 確かに、よくよく読んでみれば、必要ないコードでした。 イベントハンドリングがいらなかったのですね。 >>「イベントのOverrides」という表現は正確ではありませんね。」 勉強不足で、すみません。 正確には、 「イベントハンドリングされた、Button1.ClickメソッドのOverridesであり、 Overridesするメソッドにハンドリングは関係無い。」 といったところですかね?(意図しているところを、ご理解頂き助かりました。) お世話になりました。 有難うございます。 以下、私の様な初心者の為に ■ 正解 親クラス・・・Form上にButtonが1つ。 Public Overridable Sub Button1_Click _ (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MessageBox.Show("AAA") End Sub 子クラス・・・Form毎継承(Inherits 親フォームクラス)し、Button1_Click をOverridesする。 Public Overrides Sub Button1_Click _ (ByVal sender As System.Object, ByVal e As System.EventArgs) MessageBox.Show("BBB") End Sub |
1