在项目中添加一个用户控件“testUserControl”,并定义一个事件“TestEvent”
Public Class testUserControl
''' <summary>
''' 自定义事件。
''' </summary>
''' <param name="items">事件参数。</param>
''' <remarks></remarks>
Public Event TestEvent(items As List(Of String))
End Class
重新生成项目,将用户控件“testUserControl”添加到窗体"Form1"中,然后编辑它的自定义事件过程
Public Class Form1
Private Sub TestUserControl1_TestEvent(items As List(Of String)) Handles TestUserControl1.TestEvent
' 用户控件的自定义事件过程
End Sub
End Class
切换至窗体设计界面,更改一下用户控件的属性(比如拖动控件到新的位置,使其Location属性改变)
然后重新生成项目,这时候就报错了,切换至窗体代码编辑窗口,就多出了一个事件过程

另外我发现,如果自定义的事件不含特殊的参数,在窗体代码中对应的事件过程名称改变之后,也会出现这种情况,但是不会报错

求教:
1、为什么事件参数类型 “List(Of String)” 会变成 “System.Collections.Generic.List`1”?我猜如果它不变,即使自动生成事件过程也不会报错了吧?
2、求解如何不让它自动生成事件过程?有没有解决每次调试报错的方法或替代方法?
3、为什么会自动多出来事件过程呢?这是超自然现象吗?
------解决思路----------------------
你的用户控件有问题,应该是重新创建了新控件造成的,而过程并不会同时删除。
------解决思路----------------------
因为泛型 List(of String) 不是一个有效的类名,真正的类名就是 List`1。
然后很好玩的事情发生了:
IDE认为参数 List(of String) 不符合事件定义,自动新生成了一个;
结果编译器又认为 List`1 不是合法的语句。
互为错误

所以 .Net 中事件最好做成下面这样的形式,不仅IDE管理不会出错,还方便多个控件绑定同一个处理过程。
Public Event MyEvent(ByVal sender As Object, ByVal e As EventArgs)