代码之家  ›  专栏  ›  技术社区  ›  moster67

.NET ToolStripMenuItem-如何访问在加载窗体时生成的项的Click事件(在运行时)

  •  0
  • moster67  · 技术社区  · 14 年前

    我有一个窗体,它在加载事件时检索数据并填充一些菜单项。我添加菜单项时使用

    Viewer.AudioTrackToolStripMenuItem.DropDownItems.Add(myValue)
    

    创建的菜单项数量并不总是相同的。有时是2,有时是4,这取决于要检索的数据。

    由于菜单项是在“运行时”期间创建的,所以现在如何在用户单击/选择菜单项时拦截(我的意思是我不知道控件的名称及其单击事件)。如果菜单项在手之前就已经知道了,那么我只需在设计时创建菜单项,我就有了单击事件,但现在没有了。

    任何帮助都将不胜感激。谢谢您。

    编辑:你让我走上正轨,但我仍然收到一些错误消息。为了澄清,代码如下:

    myValue = TextBetween(value1, "s|", "|e") 'myValue is the result of a function
                                              'where myValue is a string
    myValue.click += New System.EventHandler(myValue_Click) 'ERROR
    Me.AudioTrackToolStripMenuItem.DropDownItems.Add(myValue)
    

    现在,如果我运行代码,会得到以下错误:

    1)“click”不是“string”的成员

    2)委托“System.EventHandler”需要“AddressOf”表达式或lambda表达式作为其构造函数的唯一参数。

    上面的错误可能是因为我的菜单项是根据变量(myvalue)的结果命名的吗?

    伊迪丝2:我用下面的代码使一切正常工作:

    Dim menuItem As ToolStripMenuItem
    myValue = TextBetween(value1, "s|", "|e")
    menuItem = New ToolStripMenuItem(myValue)
    Me.AudioTrackToolStripMenuItem.DropDownItems.Add(MenuItem.ToString, Nothing, AddressOf ToolStripMenuItem_Click)
    

    然后我添加了以下子项:

    Private Sub ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    Dim menuItem As ToolStripMenuItem = TryCast(sender, ToolStripMenuItem)
        If menuItem IsNot Nothing Then
              'item just clicked. 
              MessageBox.Show(menuItem.Text)
        End If
    End Sub
    
    2 回复  |  直到 14 年前
        1
  •  3
  •   Kamyar    14 年前

    this.myValue.Click += new System.EventHandler(this.myValue_Click);  
    
        2
  •  1
  •   Pieter van Ginkel    14 年前

    myValue

    ToolStripItem toolStripItem = new ToolStripItem();
    
    toolStripItem.Text = myValue;
    toolStripItem.Click += new EventHandler(toolStripItem_Click);
    
    Viewer.AudioTrackToolStripMenuItem.DropDownItems.Add(toolStripItem);