无法从PowerShell Windows Form文本框获取字符串的问题求助
问题修复方案
修复后的完整代码
[void][System.Reflection.Assembly]::Load('System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') [void][System.Reflection.Assembly]::Load('System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') [System.Windows.Forms.Application]::EnableVisualStyles() $Form = New-Object System.Windows.Forms.Form -Property @{ Name = 'Test' Text = 'Test' } # 替换冲突变量名,避免使用PowerShell自动变量 $inputTextBox = New-Object System.Windows.Forms.TextBox -Property @{ Name = "Input" Size = [System.Drawing.Size]::new(200, 200) Text = "Test" # 可选预设测试文本 } $confirm = New-Object System.Windows.Forms.Button -Property @{ Text = "Ok" Name = "confirm" Location = [System.Drawing.Point]::new(0, 210) } $close = New-Object System.Windows.Forms.Button -Property @{ Text = "Close" Name = "Close" Location = [System.Drawing.Point]::new(100, 210) } # 先定义脚本块,再绑定点击事件 $run = { Write-Host $inputTextBox.Text # 如需后续使用输入内容,可赋值到全局变量 # $global:userInput = $inputTextBox.Text } $exit = { $form.Close() } $confirm.Add_Click($run) $close.Add_Click($exit) $form.Controls.Add($confirm) $form.Controls.Add($close) $form.Controls.Add($inputTextBox) $form.ShowDialog() $form.BringToFront()
问题根源解析
- 变量名冲突:
$input是PowerShell内置自动变量(用于接收管道输入),自定义变量使用该名称会导致脚本块无法正确引用文本框对象,始终返回$null,替换为$inputTextBox即可解决。 - 事件绑定顺序错误:原代码先绑定点击事件,后定义
$run脚本块,此时绑定的是$null,按钮点击无预期响应。需先定义脚本块,再绑定到按钮事件。 - 参数拼写错误:创建TextBox时使用了错误参数名
-Propert,正确应为-Property,会导致属性设置失败。 - 属性值类型不规范:
Size和Location属性应传入System.Drawing.Size/System.Drawing.Point对象,显式使用类型构造函数可避免潜在转换问题。
内容的提问来源于stack exchange,提问作者Nonexistent
相关产品推荐
相关产品推荐

