2014-10-16 32 views
1

In visual studio 2010我將a standard linklabel拖到表單上。我doubleclick標籤產生Click-EventHandlerLinkLabel.Click:EventArgs上的InvalidCastexception

哪產生以下結果:

Private Sub lnkDoc_LinkClicked(sender As System.Object, e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles lnkDoc.Click 
    Process.Start(....) 
End Sub 

running (no builderrors) & clicking the link以下錯誤發生:

JIT-Exception: 
System.InvalidCastException: Unable to cast object of type 'System.Windows.Forms.MouseEventArgs' to type 'System.Windows.Forms.LinkLabelLinkClickedEventArgs'. 

當我changeeventhandler使用MouseEventsArgs代替然後i dont encouter any problems

Private Sub lnkDoc_LinkClicked(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles lnkDoc.Click 
     Process.Start(....) 
    End Sub 

問題: 爲什麼Visual Studio會提供使用'LinkLabelLinkClickedEventArgs'而不是所需的'MouseEventArgs'我該如何保護自己以防將來發生此類錯誤?

注:

LinkLabelLinkClickedEventArgs:爲LinkClicked事件提供數據。

MouseEventArgs:爲MouseUp,MouseDown和MouseMove事件提供數據。

+0

你有沒有注意到你處理點擊事件而不是'LinkClicked'事件? – 2014-10-16 11:24:10

+0

@TimSchmelter:的確如此。我沒有注意到這一點。我一定會專注於生成的函數名稱。現在開始變得更有意義了; – User999999 2014-10-16 11:25:38

回答

2

他們都是兩個不同的事件,有一個Click-event和一個LinkClicked-event。在屬性框中,查看事件,你會看到,如果你想自動生成一個方法,只需雙擊相應事件下的字段即可。

參見MSDN

通常,LinkClicked事件被處理時 用戶點擊在控制的鏈路上執行的任務。事件的事件處理程序通過包含與被單擊的鏈接關聯的對象的類的 LinkLabelLinkClickedEventArgs類的實例。您可以使用LinkLabel.Link 類的LinkData屬性中指定的 信息來確定單擊哪個鏈接或單擊鏈接時 執行何種類型的任務。例如,如果一個LinkLabel控件 的LinkLabel.Link對象的LinkData屬性設置爲 字符串www.microsoft.com,則可以在事件 處理程序中使用此信息來顯示Web站點的LinkClicked事件。