Visual Studio - 通用处理程序

时间:2014-02-11 22:09:34

标签: vb.net event-handling visual-studio-2013 menuitem

我的项目中有一些菜单项在点击时打开新表单,每次点击一个我运行下面的代码。但是我必须为每个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

1 个答案:

答案 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