당신이 할 수있는 한 가지는 이벤트 유형을 결정하는 데 사용할 수있는 추가 Enum 매개 변수를 사용하는 헬퍼 함수를 만드는 것입니다. 그런 다음 영역에 더미 이벤트를 묶어서 축소 할 수 있습니다.
Private Sub picButton_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles picButton.MouseEnter
UniversalEvent(this, e, EventType.MouseEnter)
End Sub
Private Sub picButton_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles picButton.MouseLeave
UniversalEvent(this, e, EventType.MouseLeave)
End Sub
Private Sub UniversalEvent(ByVal sender As Object, ByVal e As System.EventArgs, ByVal eventType As EventType)
If MouseEnter Then
'Code for mouseEnter'
ElseIf MouseLeave Then
'Code for mouseLeave'
End If'
End Sub
편집 : 오프 손, 나는
나의 제안 (... 그 반사를 사용하지 않고있다) 실제로 이벤트 자체에서 발사 어떤 이벤트 결정하는 우아한 방법을 알고하지 않습니다 :
위에서 언급했듯이, 반사는 가능성이 있습니다. 그러나 오버 헤드의 양 때문에 이상적이지는 않습니다 (특히 꽤 자주 호출 될 수있는 이벤트의 경우). 즉, 가능한 경우를 설명하기 위해 Reflection을 사용하여 작업 예제를 작성했습니다.
Please don't send the raptors...
Public Class Form1
Private Sub PictureBox_Events(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles PictureBox1.MouseLeave, PictureBox1.MouseEnter
Select Case GetEventType(New StackTrace())
Case EventType.MouseEnter
Console.WriteLine("Enter")
Case EventType.MouseLeave
Console.WriteLine("Leave")
Case Else
Console.WriteLine("Dunno")
End Select
End Sub
Private Function GetEventType(ByRef callStack As StackTrace) As EventType
'I laugh in the face of NullReferenceExceptions...'
Dim callerName As String = callStack.GetFrames()(1).GetMethod().Name
If "OnMouseEnter".Equals(callerName, StringComparison.OrdinalIgnoreCase) Then
Return EventType.MouseEnter
ElseIf "OnMouseLeave".Equals(callerName, StringComparison.OrdinalIgnoreCase) Then
Return EventType.MouseLeave
End If
Return EventType.Dunno
End Function
Enum EventType
Dunno
MouseEnter
MouseLeave
End Enum
End Class
또한 추가 할 것 (사실
StackTrace
, 내가 사용하는 무엇 인 ....System.Diagnostics
에 정확 하Reflection
이지만 나를 위해 충분히 가까이) 대부분의 이벤트가'전자가 있지만, 그 ''EventArgs'에서 상속받은 이벤트는 꽤 자세한 이벤트 정보를 가지고 있습니다. 위와 같이 할 수 있지만,''DirectCast()''가 없으면 이벤트에 대한 추가 정보가 없어집니다. – Basic좋은 지적 , 감사! – Pwninstein