VB.NETにおいて、フォームのイベントハンドラを定義するとき、

Handles キーワードの後、なぜ「Me.イベント名」ではなく
「MyBase.イベント名」を指定しなければビルドエラーになるのでしょうか?
イベントは継承されるはずなので、この動作が理解できません。

(プログラム例)

Public Class Form1
  Inherits System.Windows.Forms.Form

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  ’ビルドエラー Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.Load

  End Sub
End Class

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/02/15 19:17:47
  • 終了:--

回答(2件)

id:suzukimitsuru No.1

suzukimitsuru回答回数5ベストアンサー獲得回数02006/02/16 04:01:19

ポイント26pt

http://www.ailight.jp/blog/papanvb/archive/2004/10/25/2966.aspx

VB2005:Visual Basic の Me と My と MyBase と MyClass

Handlesの後にはイベントの型名を指定します。

Meは実体を示す物なので、型の定義を持っていません。

この場合、型名を持っているのは親クラスですので、MyBaseを指定すると言う事ではないでしょうか?

id:witt

その説明ですと、次のプログラムがビルドできる理由が成立しません。

Public Class Form1

  Inherits System.Windows.Forms.Form

  Friend WithEvents Button1 As System.Windows.Forms.Button

  ’Handles で Button クラスの実体 Button1 のイベントを指定しています。

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

  End Sub

End Class

MSDN の Handles の解説によると、

http://www.microsoft.com/japan/msdn/library/default.asp?url=...

> event

> 処理するイベントの名前。現在のクラスに対する基本クラス、

> または WithEvents キーワードを使って宣言されている

> オブジェクトのどちらかが発生させるイベントを指定する必要があります。

ということなので、なんだか釈然としないですが、こういう仕様なので、

MyBaseを指定するしかなさそうです。

2006/02/16 10:17:34
id:nanamasuhoshi No.2

nanamasuhoshi回答回数11ベストアンサー獲得回数02006/02/16 18:59:42

ポイント24pt

http://www.atmarkit.co.jp/fdotnet/basics/oop04/oop04_04.html

@IT:連載 オブジェクト指向プログラミング超入門 第4回 継承を使うために知っておくべきこと

ボタンのイベントを利用しているのと

フォームのロードイベントをオーバーライドしてるようなイメージ?

Form1をインスタンス化して使う側があったら、

そこではイベントの関連付けに

Sub Hoge(...) Handles そのインスタンス.Load って書けるんじゃないかな

ごめん私もよく分かってないです

http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_017/cs2_017...

@IT:連載 改訂版 C#入門 第17章 言語に内蔵されたイベント機能

参考までに

id:witt

ご紹介いただいたURLのページを参考にしました。

AddHanderステートメントによる動的なイベントハンドラの定義では、

納得できるコードが組めるみたいです。

Handles キーワードの奇妙な仕様ということで、まとめたいと思います。

2006/02/17 20:28:39

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません