PowerShell:OpenFileDialog选文件后如何在TextBox显示路径
解决PowerShell WinForms中PDF文件路径无法显示及变量赋值到输入框的问题
问题分析
当前代码存在两个核心问题导致文件路径无法显示:
- 点击事件中使用了未定义的变量
$Sel,无法关联到对应的输入框控件 $pdffile_1的赋值时机错误,在窗体初始化阶段就执行,此时还未选择文件,无法获取有效路径
解决方案
- 在输入框的点击事件中,使用
$sender指代当前被点击的TextBox控件,将选择的文件路径直接赋值给它的Text属性 - 若要将
$pdffile_1的值填入顶部输入框,需在合适的时机(如窗体加载完成后、或选择文件后)将变量值赋值给$textBox1.Text
修正后的完整代码
Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing function Select-File ($InitialDirectory) { $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog $OpenFileDialog.Title = "Bitte PDF auswählen" # $OpenFileDialog.InitialDirectory = $InitialDirectory $OpenFileDialog.filter = "All files (*.pdf)| *.pdf" If ($OpenFileDialog.ShowDialog() -eq "Cancel") { [System.Windows.Forms.MessageBox]::Show("Keine Datei ausgewählt!", "Error", 0, [System.Windows.Forms.MessageBoxIcon]::Exclamation) $result = $null } else { $result = $OpenFileDialog.FileName } $OpenFileDialog.Dispose() return $result } # Basis-Fenster $form = New-Object System.Windows.Forms.Form $form.Topmost = $true $form.StartPosition = 'CenterScreen' $form.Text = 'PDF-Zusammenführungstool' $form.Size = New-Object System.Drawing.Size(300,300) # $Form.AutoSize = $True # $Form.AutoSizeMode = "GrowAndShrink" # Feintuning # Powershell-Icon $Icon = [system.drawing.icon]::ExtractAssociatedIcon($PSHOME + "\powershell.exe") $Form.Icon = $Icon # Hintergrundfarbe $Form.Backcolor="white" # Schaltflächen $okButton = New-Object System.Windows.Forms.Button $okButton.Location = New-Object System.Drawing.Point(75,120) $okButton.Size = New-Object System.Drawing.Size(75,75) $okButton.Text = 'OK' $okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK $form.AcceptButton = $okButton $form.Controls.Add($okButton) $cancelButton = New-Object System.Windows.Forms.Button $cancelButton.Location = New-Object System.Drawing.Point(150,120) $cancelButton.Size = New-Object System.Drawing.Size(75,75) $cancelButton.Text = 'Cancel' $cancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel $form.CancelButton = $cancelButton $form.Controls.Add($cancelButton) # Eingabefeld 1 $textBox1 = New-Object System.Windows.Forms.TextBox $textBox1.Location = New-Object System.Drawing.Point(10,40) $textBox1.Size = New-Object System.Drawing.Size(260,20) $form.Controls.Add($textBox1) # 修正点击事件:使用$sender获取当前控件 $textBox1.Add_Click({ $selectedPath = Select-File $sender.Text = $selectedPath # 可选:将选择的路径赋值给$pdffile_1变量 $script:pdffile_1 = $selectedPath Write-Host "PDFFILE_1 is $script:pdffile_1" }) # 若$pdffile_1已有预设值,可在此处赋值给输入框 # 示例:$pdffile_1 = "C:\example.pdf" # $textBox1.Text = $pdffile_1 # Eingabefeld 2 $textBox2 = New-Object System.Windows.Forms.TextBox $textBox2.Location = New-Object System.Drawing.Point(10,80) $textBox2.Size = New-Object System.Drawing.Size(260,20) $form.Controls.Add($textBox2) # 同样修正第二个输入框的点击事件 $textBox2.Add_Click({ $selectedPath = Select-File $sender.Text = $selectedPath }) # Focus in textbox1 $form.Add_Shown({$textBox1.Select()}) $result = $form.ShowDialog() if ($result -eq [System.Windows.Forms.DialogResult]::OK) { Write-Host 'OK gedrückt' # 获取第一个输入框的内容 $x = $textBox1.Text Write-Host $x }
关键修正点说明
- 点击事件修正:用
$sender替代未定义的$Sel,$sender在事件触发时指向当前被点击的TextBox控件,确保路径赋值给正确的输入框 - 变量作用域:若要在事件脚本块中修改全局的
$pdffile_1变量,需使用$script:作用域修饰符,否则变量仅在脚本块内有效 - 预设值赋值:如果
$pdffile_1有预先定义的路径,直接通过$textBox1.Text = $pdffile_1即可将值填入顶部输入框,可放在输入框创建完成后执行
内容的提问来源于stack exchange,提问作者mr netlord
相关产品推荐
相关产品推荐

