поведение довольно странно, но вы можете сделать следующее:
Option Strict On
Public Class Form1
Private Event NewClick(sender As Object, e As MouseEventArgs)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
RaiseEvent NewClick(sender, CType(e, MouseEventArgs))
End Sub
Private Sub NewClickHandler(sender As Object, e As MouseEventArgs) Handles Me.NewClick
MsgBox(e.X & "x" & e.Y & vbCrLf & e.Button.ToString)
End Sub
End Class
Вы в основном обрабатывать правильную подпись, отлитый e
к MouseEventArgs
, а затем ререйз пользовательское событие, которое имеет подпись с MouseEventArgs
.
Edit: Я порылся немного в System.Windows.Forms.Control
классе и потому, что это работает так, что OnClick
событие элемента управления фактически поднял с MouseEventArgs
и не просто EventArgs
. Он просто затем отбрасывается до EventArgs
(который, очевидно, работает с MouseEventArgs
, наследует от EventArgs
).
Из Control
кода:
If flag AndAlso Not AddressOf Me.ValidationCancelled Then
If Not Me.GetState(67108864) Then
Me.OnClick(New MouseEventArgs(button, clicks, NativeMethods.Util.SignedLOWORD(AddressOf m.LParam), NativeMethods.Util.SignedHIWORD(AddressOf m.LParam), 0))
Me.OnMouseClick(New MouseEventArgs(button, clicks, NativeMethods.Util.SignedLOWORD(AddressOf m.LParam), NativeMethods.Util.SignedHIWORD(AddressOf m.LParam), 0))
Else
'...
End If
End If
Слишком рано утром? «MouseEventArgs» может быть отправлен в «EventArgs», потому что он получен из «EventArgs». –
@ Bjørn-Roger Kringsjå благодарит так много, что это простое решение, использующее DirectCat (e, MouseeventArgs) – ElektroStudios
Yup. Это «TryCast» или «TypeOf». –