- PR -

[VB.NET] 親クラス(Form)のイベントに対しOverridesは可能?

1
投稿者投稿内容
未記入
会議室デビュー日: 2005/05/16
投稿数: 2
投稿日時: 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できる方法を親クラスや、クラス間設計に保持しておきたいのです。

もっと良い方法、慣例があれば、教えてください。
実は、オブジェクト指向は初めてなんです。関数型しかやってません。
それとも設計手法や、解決策の方向性が全くダメダメでしょうか?

宜しくお願いします。
iStation
大ベテラン
会議室デビュー日: 2003/12/08
投稿数: 158
投稿日時: 2005-05-16 21:48
引用:

未記入さんの書き込み (2005-05-16 21:01) より:
...
と、したが何だかコンパイルエラーとなってしまいます。
親クラスのButtonObjectはPrivateだよ。と言っている様なのですが・・・。
...


コンパイラの警告通り、スコープの問題ではないでしょうか?
_________________
IEEE-CSDP 2004-2007
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-05-16 22:13
オーバーライドしているわけですから、子クラスのButton1_Click()にはHandlesは不要ですよね。

あと「イベントのOverrides」という表現は正確ではありませんね。言わんとしている事は分かりますけど。
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2005-05-17 01:20
On〜メソッドを調べましょう。
(Controlクラスから継承されているイベント発火をラップしたメソッド群です)
---------
↑思いっきり勘違いしてました。はずした内容なので無視してください。
恥ずかしい。。。

[ メッセージ編集済み 編集者: よねKEN 編集日時 2005-05-22 18:05 ]
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-05-17 09:30
引用:

よねKENさんの書き込み (2005-05-17 01:20) より:
On〜メソッドを調べましょう。



む?
Button1のClickイベントはフォームのイベントではないのでOn〜はないですよね。
Buttonを継承したクラスを作るという意味かな・・・
未記入
会議室デビュー日: 2005/05/16
投稿数: 2
投稿日時: 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

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