VB.Net菜单项动态添加了不触发单击事件

VB.Net菜单项动态添加了不触发单击事件,vb.net,winforms,onclick,menuitem,Vb.net,Winforms,Onclick,Menuitem,我在这里完全迷路了。我已经动态创建了一个菜单项。我已经添加了一个onclick事件处理程序,但这段代码似乎从未启动过。我记得几个月前它还在工作,不记得对它做过任何修改,但我可能做了一些愚蠢的事情 请参阅下面我的代码: frmMain._mnuSep1_0.Visible = True Dim tlRecentApp As New ToolStripMenuItem(strMenuCaption) tlRecentApp.Text = "Test" tlRecentApp.Name = "AddA

我在这里完全迷路了。我已经动态创建了一个菜单项。我已经添加了一个onclick事件处理程序,但这段代码似乎从未启动过。我记得几个月前它还在工作,不记得对它做过任何修改,但我可能做了一些愚蠢的事情

请参阅下面我的代码:

frmMain._mnuSep1_0.Visible = True
Dim tlRecentApp As New ToolStripMenuItem(strMenuCaption)
tlRecentApp.Text = "Test"
tlRecentApp.Name = "AddApp"
tlRecentApp.Tag = strMenuID
RecentAppID = strMenuID
AddHandler tlRecentApp.Click, AddressOf Test
frmMain.mnuApplicantS.DropDownItems.Add(tlRecentApp.ToString)
事件的代码:

Public Sub MnuRecentApp(ByVal sender As Object, ByVal e As EventArgs)
   ' MsgBox(sender.tag.ToString)
    ApplicantID = sender.tag.ToString
    frmApplicantEdit.Show()
End Sub

它会被创建,但当我单击它时,什么也不会发生:

如果事件处理程序的代码是

Public Sub MnuRecentApp(ByVal sender As Object, ByVal e As EventArgs)
   ' MsgBox(sender.tag.ToString)
    ApplicantID = sender.tag.ToString
    frmApplicantEdit.Show()
End Sub
那么这条线

AddHandler tlRecentApp.Click, AddressOf Test
应该是

AddHandler tlRecentApp.Click, AddressOf MnuRecentApp

在不改变太多代码的情况下,我成功地测试了以下内容:

控制

Dim tlRecentApp As New ToolStripMenuItem(strMenuCaption)
'tlRecentApp.Text = "Test"  This isn't needed as it's done on the above line when declared
tlRecentApp.Name = "AddApp"
tlRecentApp.Tag = strMenuID
RecentAppID = strMenuID
AddHandler tlRecentApp.Click, AddressOf MnuRecentApp
frmMain.mnuApplicantS.Items.Add(tlRecentApp)
Public Sub MnuRecentApp(ByVal sender As Object, ByVal e As EventArgs)
    ApplicantID = CType(sender, ToolStripMenuItem).Tag.ToString
    frmApplicantEdit.Show()
End Sub
方法

Dim tlRecentApp As New ToolStripMenuItem(strMenuCaption)
'tlRecentApp.Text = "Test"  This isn't needed as it's done on the above line when declared
tlRecentApp.Name = "AddApp"
tlRecentApp.Tag = strMenuID
RecentAppID = strMenuID
AddHandler tlRecentApp.Click, AddressOf MnuRecentApp
frmMain.mnuApplicantS.Items.Add(tlRecentApp)
Public Sub MnuRecentApp(ByVal sender As Object, ByVal e As EventArgs)
    ApplicantID = CType(sender, ToolStripMenuItem).Tag.ToString
    frmApplicantEdit.Show()
End Sub

mnuApplicantS
在我的示例中是一个
ToolStrip
控件。如果您能澄清应用程序中的
mnuApplicatS
,我可能会提供更好的解决方案。

我发现了问题。这一行:

frmMain.mnuApplicantS.DropDownItems.Add(tlRecentApp.ToString)
应改为:

frmMain.mnuApplicantS.DropDownItems.Add(tlRecentApp)

在您的代码中,您正在将方法
Test
指定为Click事件的处理程序,请尝试在此行
AddHandler tlRecentApp更改它。单击,AddressOf Test
您需要提供更多信息或更好的工作示例。什么是_mnuSep1_0、strmenuction、strMenuID、RecentAppID、mnu应用程序?我们不能只是猜测。嗨,是的(为没有改变它而道歉),你是对的,我只是在摆弄它来让它工作。最初它是MnuRecentApp的Address,但仍然不起作用,它也是一个ToolStrip菜单项。将我的代码更改为与您的代码匹配,但仍然无法工作…@QSTrain这很奇怪。在提供给您之前,我有能力测试这段代码,它对我起了作用。你把代码一个接一个地复制了吗?可能值得创建一个全新的项目,只使用我的代码看看它是否有效,而不是修改你的代码。嘿,Jinx,我试着在单击按钮时将你的代码复制到主窗体。在那里,Intellisense/autocomplete没有给我一个items选项(即items不是mnuApplicantS的成员-因此它什么都不做。非常奇怪,因为它在代码中添加了一个菜单项。。。