- PR -

派生クラスのイベント処理を基本クラスより先に実行する

1
投稿者投稿内容
みかん
常連さん
会議室デビュー日: 2006/08/08
投稿数: 31
投稿日時: 2008-01-08 19:04
いつもお世話になっております。

基本クラス(Form)にボタン1があり、クリックイベントで処理する内容をAとします。
この基本クラスを継承した派生クラスを作成し、ボタン1をクリックしたときの処理をBとします。
実行時にボタン1をクリックすると 基本クラスの処理A→派生クラスの処理Bの順で
処理されますが、
B→Aの順で処理させる方法はあるのでしょうか?

いろいろと調べてみましたが、方法がわからず困っています。
どなたかご存知の方がいらっしゃれば、お教えください。

よろしくお願い致します。

環境は下記の通りです。
Windows XP Professional Version 2002 SP2
Visual Studio 2005 Professional Edition
.NET Framework Version 2
使用言語 vb.net


ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2008-01-08 19:10
なんでそうしたいんだろう?個人的にはやめてほしいんだけど。
Bの後にデリゲートで呼び出しでもしてイベントを1個追加するとか回避方法なんていくらでもありそう。
某J氏も同じことを言っていたとおもうがフォームのメンバにあたる機能をフォームで継承するのは俺は大嫌いだなぁ。
みかん
常連さん
会議室デビュー日: 2006/08/08
投稿数: 31
投稿日時: 2008-01-08 19:22
早速の回答ありがとうございます。
基本クラスにある処理Aは改修できず、ボタン1をクリックすると
無条件に実行される状態です。

同じイベントが発生した時に、派生クラスの処理Bを先に実行する
方法があれば教えてください。
よろしくお願い致します。


THREE-ONE
会議室デビュー日: 2006/04/06
投稿数: 6
投稿日時: 2008-01-08 20:07
親フォームのボタンを非表示にして、同じ場所にもう一個ボタン追加。
追加したボタンがクリックされたら、処理後に親フォームのボタン.Click()してやればいいのでは?
一応、GetInvocationList で登録されている Delegate の配列が取得できるので、一度削除して任意の順に再登録すれば、お望みのことはできると思います。(試してませんが)
ですが、私もオススメできません。


[ メッセージ編集済み 編集者: THREE-ONE 編集日時 2008-01-08 20:10 ]
ほげ太
会議室デビュー日: 2008/01/09
投稿数: 2
投稿日時: 2008-01-09 12:57
イベントは単純にオーバーライドできませんが、現在どのようにしているのでしょうか?
基本クラスで、
コード:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MessageBox.Show("基本クラスの処理")
    End Sub



ではなく、次のようになっていますか?

コード:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.OnButton1_Click(e)
    End Sub
    Protected Overridable Sub OnButton1_Click(ByVal e As EventArgs)
        MessageBox.Show("基本クラスの処理")
    End Sub



であれば、派生クラスで次のようにすればよいです。

コード:
    Protected Overrides Sub OnButton1_Click(ByVal e As System.EventArgs)
        MessageBox.Show("派生クラスの処理")
        MyBase.OnButton1_Click(e)
    End Sub


みかん
常連さん
会議室デビュー日: 2006/08/08
投稿数: 31
投稿日時: 2008-01-09 14:25
ご回答ありがとうございます。

勉強不足で申し訳ありません。
大変参考になりました。ただ、基本クラスにOverridableが記述されていないので
また解決できていないのですが、もう少し仕組みを調べてがんばってみます。
ありがとうございました。

Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2008-01-11 09:05
因みに現在どんな感じのコードになってるんですか?
1

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