You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 09:42:34