【问题标题】:Add ContextMenuStipItem at Run time在运行时添加 ContextMenuStipItem
【发布时间】:2013-07-11 16:51:44
【问题描述】:

我正在开发一个在系统托盘中运行的小应用程序。当用户右键单击托盘中的图标时,会显示一个 MenuStrip。其中一个按钮会打开一个表单,用户可以在其中向条带添加新按钮。我可以创建按钮,但是当添加按钮时,会为所有其他按钮设置路径。

示例: 我创建了一个新的按钮名称“文档”。我将路径设置为“我的文档”文件夹。这样可行。 然后我添加另一个名为“C”的按钮。我将路径设置为“C:\”。它设置路径并打开 C:\,但也将 Documents 按钮设置为“C:\”。

表单上有 2 个文本框,一个用于名称,一个用于路径。名称是菜单中显示的内容,路径是用户单击菜单中的按钮时应打开的内容。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim newItem As New ToolStripMenuItem
    newItem.Text = NameBox.Text
    AddHandler newItem.Click, AddressOf buttonClick
    ContextMenuStrip1.Items.Add(newItem)

End Sub

Private Sub buttonClick(ByVal sender As System.Object, ByVal e As EventArgs)
    Process.Start("explorer.exe", PathBox.Text)
End Sub

我了解发生了什么,但我不确定如何解决它。它将所有按钮的点击事件设置为buttonClick,那么如何为每个在运行时处理自己的点击事件的按钮创建一个新的子?

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    PathBox.Text 返回文本框的当前值。

    相反,您应该添加一个 lambda 表达式并在其闭包中捕获原始值:

    Dim path As String = PathBox.Text
    
    AddHandler newItem.Click, Sub
        Process.Start("explorer.exe", path)
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-02
      • 2019-06-07
      • 2011-10-21
      • 2015-03-24
      • 2012-09-16
      • 2015-07-25
      相关资源
      最近更新 更多