1

問題が単純であることはわかっていますが、コードの何が問題なのかわかりません。この Head First C# の本を持っていて、コードを VB.NET に変換しました。フォームのボタンをクリックすると、クラスのcatchesサブルーチンが呼び出されることを期待していました。Pitcherしかし、何も起こりません。

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim myBall As New Ball
        Dim pitcher As New Pitcher
        myBall.OnBallInPlay(New BallEventArgs(10, 20))
    End Sub
End Class

Public Class Ball
    Public Event BallInPlay(ByVal sender As Object, ByVal e As BallEventArgs)
    Public Sub OnBallInPlay(ByVal e As BallEventArgs)
        RaiseEvent BallInPlay(Me, e)
    End Sub
End Class

Public Class BallEventArgs
    Inherits EventArgs
    Dim trajectory As Integer
    Dim distance As Integer
    Public Sub New(ByVal trajectory As Integer, ByVal distance As Integer)
        Me.trajectory = trajectory
        Me.distance = distance
    End Sub
End Class

Public Class Pitcher
    Public WithEvents mySender As Ball

    Public Sub catches(ByVal sender As Object, ByVal e As EventArgs) Handles mySender.BallInPlay
        MessageBox.Show("Pitcher: ""I catched the ball!""")
    End Sub
End Class

を呼び出した後Ball.OnBallInPlayPitcher.catchesリッスンします。それとも、明らかで重要な何かを見逃していますか?

4

2 に答える 2

1

を定義しますpitcherが、使用することはありません。

Dim pitcher As New Pitcher

何もしないので、ball のインスタンスがないため、catches サブルーチンを呼び出すことはできません。

さらに、mySenderインスタンス化されることはなく、別の参照を参照しますmySendermyBallBall

于 2013-09-05T22:31:25.470 に答える