PowerShell 版本 4.0(.PS1 文件)- 将 TextBox 中的文本添加到要在控制台上打印的数组中
PowerShell Version 4.0 (.PS1 File) - Add Text from TextBox into an Array to be printed on the console
请注意这是 PowerShell 4.0。我不认为 Convert-String 可用于 ,但当然,其他版本的 PowerShell 的答案仍然值得一读。
好的。我是 PowerShell 的新手,但有趣的是,通过 Google 和 Whosebug 我都无法找到这个问题的答案;我只是不确定该去哪里。
请记住,我想从 PowerShell 提示符启动文件 example.ps1
。
Function Show_Form
{
Add-Type -AssemblyName System.Windows.Forms
$global:Y_Position = 10
$global:X_Position = 5
$Form = New-Object system.Windows.Forms.Form
$Form.Text = "Sample Form"
$Form.Width = 400
$Form.Height = 450
$Form.AutoScroll = $True
$Form.AutoSize = $True
$Form.AutoSizeMode = "GrowOnly"
$Form.MinimizeBox = $False
$Form.MaximizeBox = $False
$Label = New-Object System.Windows.Forms.Label
$Label.Text = "Please Fill in the Required Information:`n"
$Label.AutoSize = $True
$Form.Controls.Add($Label)
$LabelTextBox = New-Object System.Windows.Forms.Label
$LabelTextBox.Location = New-Object System.Drawing.Point(10,40)
$LabelTextBox.Text = $Text
$LabelTextBox.AutoSize = $True
$Form.Controls.Add($LabelTextBox)
$global:textBox = New-Object System.Windows.Forms.TextBox
$X_Position = $X_Position+90
$textBox.Location = New-Object System.Drawing.Point(10,40)
$textBox.Size = New-Object System.Drawing.Size(260,20)
$Form.Controls.Add($textBox)
$Okbutton = New-Object System.Windows.Forms.Button
$Okbutton.Location = New-Object System.Drawing.Size(250,570)
$Okbutton.Size = New-Object System.Drawing.Size(100,30)
$Okbutton.Text = "OK"
<#-----------------------------------#>
$global:Arr = @("lll", "ppp", 2)
$OkButton.Add_Click({[System.Windows.Forms.MessageBox]::Show($textBox.text, "My Dialog Box")})
$OkButton.Add_Click({Write-Host $textBox.text})
$global:Arr[0] = $textBox.text
$OkButton.Add_Click({Write-Host $Arr})
<#-----------------------------------#>
$Okbutton.Add_Click({$Form.Close()})
$Form.Controls.Add($Okbutton)
$Form.ShowDialog()
}
Show_Form
我的问题是这些行:
$global:Arr = @("lll", "ppp", 2)
$OkButton.Add_Click({[System.Windows.Forms.MessageBox]::Show($textBox.text, "My Dialog Box")})
$OkButton.Add_Click({Write-Host $textBox.text})
$global:Arr[0] = $textBox.text
$OkButton.Add_Click({Write-Host $Arr})
Add_Click({Write-Host $textBox.text})
显示在控制台中,但是当我将 $textBox.text
添加到数组(对象数组或其他)或用它替换另一个元素然后打印数组时,它始终只是空白。
.
如果我执行以下操作(注意:Arr[0]
和 Arr[1]
)
$global:Arr = @("lll", "ppp", 2)
$OkButton.Add_Click({[System.Windows.Forms.MessageBox]::Show($textBox.text, "My Dialog Box")})
$OkButton.Add_Click({Write-Host $textBox.text})
$global:Arr[0] = $textBox.text
$OkButton.Add_Click({Write-Host $Arr})
$global:Arr[1] = "$textBox.text"
$OkButton.Add_Click({Write-Host $Arr})
两个元素都写为值 System.Windows.Forms.TextBox, Text: .text
我想知道如何让 $textBox.text
显示在数组中的控制台中?
你遇到的问题很简单。
您假设 $global:Arr[1] = "$textBox.text"
将设置为您单击表单中的“确定”按钮时的实际文本值。
但实际上,这段代码是在$Form.ShowDialog()
之前调用的。因此,在那个时间点,你的文本框确实是空的,这就解释了你得到了什么。
如果你想让你的全局数组在按下确定按钮后设置为文本框文本,你需要通过Add_Click
事件设置用户点击按钮时的数组值。
像这样:
$OkButton.Add_Click( { $global:Arr[0] = $textBox.text })
补充说明
如果您还不熟悉 Powershell 中的调试工作原理,我建议您查看一些调试教程。
您会立即看到脚本确实在表单显示之前就进入了您的变量赋值,这可能会让您了解情况。
--
您可以在下方看到分配行上的调试点。在我有机会看到或输入表单中的任何内容之前,执行已停止,这表明该值显然不可能是表单中的值。此时从控制台查询 $textBox.text
显示值为空,正如我们对新初始化的表单所期望的那样。
一些文档:how to debug scripts(即使它说的是 ISE,所有这些也应该适用于 VSCode)
请注意这是 PowerShell 4.0。我不认为 Convert-String 可用于 ,但当然,其他版本的 PowerShell 的答案仍然值得一读。
好的。我是 PowerShell 的新手,但有趣的是,通过 Google 和 Whosebug 我都无法找到这个问题的答案;我只是不确定该去哪里。
请记住,我想从 PowerShell 提示符启动文件 example.ps1
。
Function Show_Form
{
Add-Type -AssemblyName System.Windows.Forms
$global:Y_Position = 10
$global:X_Position = 5
$Form = New-Object system.Windows.Forms.Form
$Form.Text = "Sample Form"
$Form.Width = 400
$Form.Height = 450
$Form.AutoScroll = $True
$Form.AutoSize = $True
$Form.AutoSizeMode = "GrowOnly"
$Form.MinimizeBox = $False
$Form.MaximizeBox = $False
$Label = New-Object System.Windows.Forms.Label
$Label.Text = "Please Fill in the Required Information:`n"
$Label.AutoSize = $True
$Form.Controls.Add($Label)
$LabelTextBox = New-Object System.Windows.Forms.Label
$LabelTextBox.Location = New-Object System.Drawing.Point(10,40)
$LabelTextBox.Text = $Text
$LabelTextBox.AutoSize = $True
$Form.Controls.Add($LabelTextBox)
$global:textBox = New-Object System.Windows.Forms.TextBox
$X_Position = $X_Position+90
$textBox.Location = New-Object System.Drawing.Point(10,40)
$textBox.Size = New-Object System.Drawing.Size(260,20)
$Form.Controls.Add($textBox)
$Okbutton = New-Object System.Windows.Forms.Button
$Okbutton.Location = New-Object System.Drawing.Size(250,570)
$Okbutton.Size = New-Object System.Drawing.Size(100,30)
$Okbutton.Text = "OK"
<#-----------------------------------#>
$global:Arr = @("lll", "ppp", 2)
$OkButton.Add_Click({[System.Windows.Forms.MessageBox]::Show($textBox.text, "My Dialog Box")})
$OkButton.Add_Click({Write-Host $textBox.text})
$global:Arr[0] = $textBox.text
$OkButton.Add_Click({Write-Host $Arr})
<#-----------------------------------#>
$Okbutton.Add_Click({$Form.Close()})
$Form.Controls.Add($Okbutton)
$Form.ShowDialog()
}
Show_Form
我的问题是这些行:
$global:Arr = @("lll", "ppp", 2)
$OkButton.Add_Click({[System.Windows.Forms.MessageBox]::Show($textBox.text, "My Dialog Box")})
$OkButton.Add_Click({Write-Host $textBox.text})
$global:Arr[0] = $textBox.text
$OkButton.Add_Click({Write-Host $Arr})
Add_Click({Write-Host $textBox.text})
显示在控制台中,但是当我将 $textBox.text
添加到数组(对象数组或其他)或用它替换另一个元素然后打印数组时,它始终只是空白。
.
如果我执行以下操作(注意:Arr[0]
和 Arr[1]
)
$global:Arr = @("lll", "ppp", 2)
$OkButton.Add_Click({[System.Windows.Forms.MessageBox]::Show($textBox.text, "My Dialog Box")})
$OkButton.Add_Click({Write-Host $textBox.text})
$global:Arr[0] = $textBox.text
$OkButton.Add_Click({Write-Host $Arr})
$global:Arr[1] = "$textBox.text"
$OkButton.Add_Click({Write-Host $Arr})
两个元素都写为值 System.Windows.Forms.TextBox, Text: .text
我想知道如何让 $textBox.text
显示在数组中的控制台中?
你遇到的问题很简单。
您假设 $global:Arr[1] = "$textBox.text"
将设置为您单击表单中的“确定”按钮时的实际文本值。
但实际上,这段代码是在$Form.ShowDialog()
之前调用的。因此,在那个时间点,你的文本框确实是空的,这就解释了你得到了什么。
如果你想让你的全局数组在按下确定按钮后设置为文本框文本,你需要通过Add_Click
事件设置用户点击按钮时的数组值。
像这样:
$OkButton.Add_Click( { $global:Arr[0] = $textBox.text })
补充说明
如果您还不熟悉 Powershell 中的调试工作原理,我建议您查看一些调试教程。
您会立即看到脚本确实在表单显示之前就进入了您的变量赋值,这可能会让您了解情况。
--
您可以在下方看到分配行上的调试点。在我有机会看到或输入表单中的任何内容之前,执行已停止,这表明该值显然不可能是表单中的值。此时从控制台查询 $textBox.text
显示值为空,正如我们对新初始化的表单所期望的那样。
一些文档:how to debug scripts(即使它说的是 ISE,所有这些也应该适用于 VSCode)