人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: witt
●カテゴリ:コンピュータ
✍キーワード: Class as object sub VB.NET
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● suzukimitsuru
●26ポイント

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

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

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

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

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

◎質問者からの返答

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

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を指定するしかなさそうです。


2 ● nanamasuhoshi
●24ポイント

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章 言語に内蔵されたイベント機能

参考までに

◎質問者からの返答

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ