2014-09-28 3 views
-3

Option Strict бросает некоторые errores в этих подписей:Option Strict ошибка сигнатур метода

Private Sub NotifyIcon_Systray_Click(ByVal sender As Object, ByVal e As MouseEventArgs) _ 
Handles RadMenuItem_Hide.Click, 
     RadMenuItem_Show.Click, 
     NotifyIcon_Systray.MouseDoubleClick 

End Sub 

Private Sub RadListControl_ProcessList_DoubleClick(ByVal sender As Object, ByVal e As MouseEventArgs) _ 
Handles RadListControl_ProcessList.DoubleClick 

End Sub 

Оригинальные подписи: sender As Object, e as EventArgs, но я изменил их MouseEventArgs, потому что мне нужно, чтобы определить кнопку нажатой с peoperty e.Button.

Как решить эту проблему?

+0

Слишком рано утром? «MouseEventArgs» может быть отправлен в «EventArgs», потому что он получен из «EventArgs». –

+0

@ Bjørn-Roger Kringsjå благодарит так много, что это простое решение, использующее DirectCat (e, MouseeventArgs) – ElektroStudios

+0

Yup. Это «TryCast» или «TypeOf». –

ответ

2

поведение довольно странно, но вы можете сделать следующее:

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 
2

Вы не можете произвольно изменить тип этого второго параметра. Событие Click передает объект EventArgs своим обработчикам. Ваше изменение типа параметра не приведет к волшебному изменению типа этого объекта. Вы можете использовать только параметр типа MouseEventArgs, если это соответствует сигнатуре события. Это делается для MouseClick и MouseDoubleClick, но это не для Click или DoubleClick. Вы не можете это изменить.

+0

'Вы не можете изменить это.' Я изменил его, как вы видели, и он отлично работает, я могу получить объект 'e' типа' MouseEventargs' с свойством 'e.Button', работающим должным образом для' Click' и 'DoubleClick'. – ElektroStudios

+0

@ElektroStudios - Он отлично работает? Я думал, вы сказали, что получаете опционные строгие ошибки? –

+0

Но если я отключу опцию Strict, я могу скомпилировать ее и работать ... потому что, как говорят люди выше, MouseEventargs происходит от Eventargs, спасибо за вашу помощь – ElektroStudios