我正在处理一个在系统托盘中运行的小应用程序。当用户右键单击托盘中的图标时,会显示一个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,那么如何为每个在运行时处理其自身点击事件的按钮创建一个新子?
答案 0 :(得分:1)
PathBox.Text
返回文本框的当前值。
相反,您应该添加一个lambda表达式并在其闭包中捕获原始值:
Dim path As String = PathBox.Text
AddHandler newItem.Click, Sub
Process.Start("explorer.exe", path)
End Sub