2014-10-16 31 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事件。