- - PR -
派生クラスのイベント処理を基本クラスより先に実行する
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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 | ||||||||||||
|
投稿日時: 2008-01-08 19:10
なんでそうしたいんだろう?個人的にはやめてほしいんだけど。
Bの後にデリゲートで呼び出しでもしてイベントを1個追加するとか回避方法なんていくらでもありそう。 某J氏も同じことを言っていたとおもうがフォームのメンバにあたる機能をフォームで継承するのは俺は大嫌いだなぁ。 | ||||||||||||
|
投稿日時: 2008-01-08 19:22
早速の回答ありがとうございます。
基本クラスにある処理Aは改修できず、ボタン1をクリックすると 無条件に実行される状態です。 同じイベントが発生した時に、派生クラスの処理Bを先に実行する 方法があれば教えてください。 よろしくお願い致します。 | ||||||||||||
|
投稿日時: 2008-01-08 20:07
親フォームのボタンを非表示にして、同じ場所にもう一個ボタン追加。
追加したボタンがクリックされたら、処理後に親フォームのボタン.Click()してやればいいのでは? 一応、GetInvocationList で登録されている Delegate の配列が取得できるので、一度削除して任意の順に再登録すれば、お望みのことはできると思います。(試してませんが) ですが、私もオススメできません。 [ メッセージ編集済み 編集者: THREE-ONE 編集日時 2008-01-08 20:10 ] | ||||||||||||
|
投稿日時: 2008-01-09 12:57
イベントは単純にオーバーライドできませんが、現在どのようにしているのでしょうか?
基本クラスで、
ではなく、次のようになっていますか?
であれば、派生クラスで次のようにすればよいです。
| ||||||||||||
|
投稿日時: 2008-01-09 14:25
ご回答ありがとうございます。
勉強不足で申し訳ありません。 大変参考になりました。ただ、基本クラスにOverridableが記述されていないので また解決できていないのですが、もう少し仕組みを調べてがんばってみます。 ありがとうございました。 | ||||||||||||
|
投稿日時: 2008-01-11 09:05
因みに現在どんな感じのコードになってるんですか?
|
1