在visual studio 2010
中,我将a standard linklabel
拖到表单上。我doubleclick
生成Click-EventHandler
的标签。
产生以下结果:
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'.
当我change
eventhandler
使用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 :(得分:2)
它们是两个不同的事件,有Click
-event和LinkClicked
-event。在属性框中,查看事件,您将看到,如果您想自动生成方法,只需双击相应事件下的字段。
请参阅MSDN:
通常,处理
LinkClicked
事件以执行任务 用户单击控件中的链接。的事件处理程序LinkClicked
事件传递了一个实例 包含LinkLabelLinkClickedEventArgs
的{{1}}类 与单击的链接关联的对象。您可以使用 LinkLabel.Link的LinkData属性中指定的信息 用于确定单击了哪个链接或要执行的任务类型的类 单击链接时执行。例如,如果LinkLabel.Link
控件 有一个LinkLabel
对象定义其LinkData属性设置为 字符串www.microsoft.com,您可以在事件中使用此信息 用于显示网站的LinkClicked事件的处理程序。