0

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

示例:我创建了一个新的按钮名称“文档”。我将路径设置为“我的文档”文件夹。这样可行。然后我添加另一个名为“C”的按钮。我将路径设置为“C:\”。它设置路径并打开 C:\,但也将“文档”按钮设置为“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,那么如何为每个在运行时处理自己的单击事件的按钮创建一个新的子?

4

1 回答 1

1

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

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

Dim path As String = PathBox.Text

AddHandler newItem.Click, Sub
    Process.Start("explorer.exe", path)
End Sub
于 2013-07-11T17:51:21.667 回答