내 문제는 간단하지만 내 코드에 무엇이 잘못된 것인지 알 수 없습니다. 나는이 Head C# book을 가지고 있으며 VB.NET에서 코드를 변환했다. 내 양식에서 버튼을 클릭하면 catches
서브 루틴 Pitcher
클래스가 호출 될 것으로 예상됩니다. 그러나 아무 일도 일어나지 않습니다.내가 뭘 잘못 했니? Visual Basic 이벤트
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.OnBallInPlay
를 호출 한 후, Pitcher.catches
듣고된다. 그렇지 않습니까? 아니면 분명하고 중요한 것을 빠뜨린 것입니까?
AddHandler를 사용하여 WithEvents 및 Handles 키워드가 더 이상 필요 없다는 것을 알았습니다. 권리? 차이점은 후자가 런타임에 대한 것인가? – Arman
그것은 나에게 힌트를 줬다. Public 클래스 투수 희미한 myBall으로 새로운 볼 하위 새로운 (볼로 ByVal의 공) myBall = 볼 AddHandler에 myBall.BallInPlay, AddressOf를 Me.catches 최종 하위 공공 하위 어획량 (개체로 ByVal의 보낸 사람, EventArgs입니다으로 ByVal의 전자) MessageBox.Show ("투수 :" "나는 공을 잡았습니다." ") End Sub End Class – Arman
죄송합니다. 읽을 수 없습니다.문제는 'myBall'을 투수 오브젝트로 참조하는 것입니다 (Alex가 지적한대로). 둘 다 감사합니다. – Arman