2013-07-11 137 views
0

我正在處理系統托盤中運行的一個小應用程序。有一個MenuStrip顯示用戶何時右擊托盤中的圖標。其中一個按鈕打開一個表單,用戶可以在該表單上添加新按鈕。我可以創建按鈕,但是當添加一個按鈕時,路徑將被設置爲所有其他按鈕。在運行時添加ContextMenuStipItem

例如: 我創建了一個新的按鈕名稱「Documents」。我將路徑設置爲「我的文檔」文件夾。這樣可行。 然後我添加另一個名爲「C」的按鈕。我將路徑設置爲「C:\」。它設置路徑並打開C:\,但它也將「文檔」按鈕設置爲「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

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

相反,你應該添加一個lambda表達式,並在其關閉捕捉原始值:

Dim path As String = PathBox.Text 

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

真棒!比你! –