2

次のコードは、ディレクトリを取得し、それぞれのメニュー項目を作成します。Add_Click 部分までは問題なく動作します。何らかの理由で、どのボタンがクリックされても同じファイルを吐き出すだけです。

$directory = Get-ChildItem -Path ($relative_path + "/scripts")

foreach ($file in $directory) 
{
    $mnuTemp = New-Object System.Windows.Forms.MenuItem
    $mnuTemp.Text = $file.Name
    $mnuTemp.Add_Click({Write-Host $file.Name})
    $mnuScripts.MenuItems.Add($mnuTemp)
}
4

1 に答える 1

0

クリック コマンドを追加したときに、まだ$file.nameへの参照を渡しています。

$mnuTemp.Add_Click({Write-Host $file.Name})

代わりに、完全に評価されたスクリプト ブロックへの参照を渡す必要があります。

$mnuTemp.Add_Click([scriptblock]::Create("write-host $($file.name)"))

以下の変更を加えてコードを編集しました。

$directory = Get-ChildItem -Path ($relative_path + "/scripts")

foreach ($file in $directory) 
{
    $mnuTemp = New-Object System.Windows.Forms.MenuItem
    $mnuTemp.Text = $file.Name
    $mnuTemp.Add_Click([scriptblock]::Create("write-host $($file.name)"))
    $mnuScripts.MenuItems.Add($mnuTemp)
}
于 2013-08-04T17:05:00.463 に答える