0

システムトレイで実行される小さなアプリケーションに取り組んでいます。ユーザーがトレイのアイコンを右クリックすると表示される MenuStrip があります。ボタンの 1 つは、ユーザーが新しいボタンをストリップに追加できるフォームを開きます。ボタンを作成できますが、ボタンが追加されると、他のすべてのボタンのパスが設定されます。

例: 新しいボタン名「ドキュメント」を作成します。My Documents フォルダーへのパスを設定します。それはうまくいきます。次に、「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テキストボックスの現在の値を返します。

代わりに、ラムダ式を追加して、そのクロージャーで元の値を取得する必要があります。

Dim path As String = PathBox.Text

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