我的项目中有一些菜单项在点击时打开新表单,每次点击一个我运行下面的代码。但是我必须为每个MenuItem_Click
事件添加它,因此每当我更改代码时,我必须在表单之间复制和过去。 FormName
是唯一改变的东西。我的所有菜单项都以相应的表单mi_FormName
命名。我知道如何制作一般事件处理程序。
有没有办法让它抓住点击菜单项的名称,删除mi_
,然后将其插入与FormName
相同的位置?
Private Sub MenuItem_Click(sender As Object, e As EventArgs) Handles MenuItem.Click
Dim F As Form
If Not IsNothing(modForms.CheckOpen("FormName")) Then
F = modForms.CheckOpen("FormName")
If F.IsDisposed Then
modForms.CheckOpen.Remove("FormName")
F = New FormName
F.Show()
ElseIf F.Visible = False Then
F.Show()
Else
F.BringToFront()
End If
Else
F = New FormName
F.Show()
End If
End Sub
答案 0 :(得分:1)
为什么不使用传递表单类型的lambda?您可以使用GetType
查找文本名称并使用简单约束来允许创建实例
AddHandler mi_FormName.Click, Sub(s, e) OnClick(Of FormName)
AddHandler mi_OtherForm.Click, Sub(s, e) OnClick(Of OtherForm)
点击处理程序基本上如下所示
Private Sub OnClick(Of T As {New, Form})()
Dim name = GetType(T).Name
Dim F As Form
If Not IsNothing(modForms.CheckOpen(name)) Then
F = modForms.CheckOpen(name)
If F.IsDisposed Then
modForms.CheckOpen.Remove(name)
F = New T
F.Show()
ElseIf F.Visible = False Then
F.Show()
Else
F.BringToFront()
End If
Else
F = New T
F.Show()
End If
End Sub