在运行时添加ContextMenuStipItem

时间:2013-07-11 16:51:44

标签: vb.net

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

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

表单上有两个文本框,一个用于名称,另一个用于路径。名称显示在菜单中,当用户单击菜单中的按钮时,路径应该打开。

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,那么如何为每个在运行时处理其自身点击事件的按钮创建一个新子?

1 个答案:

答案 0 :(得分:1)

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

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

Dim path As String = PathBox.Text

AddHandler newItem.Click, Sub
    Process.Start("explorer.exe", path)
End Sub