- 419 名前:デフォルトの名無しさん mailto:sage [2025/03/07(金) 23:19:13.53 ID:6K+ignj1.net]
- Add_Clickに渡したスクリプトブロックが実行されるのはボタンクリック時。
その時にはもうsetSelectButtonを抜けてるから、setSelectButton実行時に渡した$folderTypeはもう見えない。 最後の手段的なglobalスコープの使用を避けて手っ取り早く解決するなら、 {〜〜〜}.GetNewClosure()でsetSelectButton実行中の変数スコープを記憶(?)したうえで 自前のクラスとかハッシュテーブル等で入出力しちゃう。とか。適当実装だとこんな。 function setSelectButton($def){ $conf = New-Object System.Windows.Forms.Button $conf.Location = New-Object System.Drawing.Point($def.xAxis,$def.yAxis) $conf.Size = New-Object System.Drawing.Size($def.xSize, $def.ySize) $conf.Text = "Select" $conf.Add_Click({ $dialog_FolderSelection = New-Object Windows.Forms.FolderBrowserDialog if($dialog_FolderSelection.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK){ $def.textBox.Text = $dialog_FolderSelection.SelectedPath } }.GetNewClosure()) return $conf } (略) $inputDef = [Ordered] @{xAxis = 370; yAxis = 50; xSize = 70; ySize = 20; textBox = $textBox_inputFolder;} $outputDef = [Ordered] @{xAxis = 370; yAxis = 70; xSize = 70; ySize = 20; textBox = $textBox_outputFolder;} # create Select button $button_Select_inputFolder = setSelectButton $inputDef $button_Select_outputFolder = setSelectButton $outputDef (略) if([String]::IsNullOrEmpty($inputDef.textBox.Text)){ # show a message dialog if no file is selected ※これで入力欄にフォルダパスをコピペする人(=私)も安心
|

|