我想用powershell建立一个gui表单,我想添加一个按钮,如下图所示。
$Button = New-Object System.Windows.Forms.Button
$Button.Location = New-Object System.Drawing.Size(35,35)
$Button.Size = New-Object System.Drawing.Size(120,23)
$Button.Text = "Show Dialog Box"
$Form.Controls.Add($Button)
$Button.Add_Click($Button_Click)
现在我想用几个命令创建一个名为button_click的函数,比方说:echo "Hello world",所以我写了这个。
Function Button_Click(){
echo "Hello World"}
但是点击按钮却没有任何结果, 我到底做错了什么?
你使用的是Write-Output,它将写入管道,在这种情况下,将不会显示,因为你的PowerShell控制台是锁定的,当 $form.ShowDialog()
是活动的。
然而你仍然可以这样做! Write-host
是另一个返回输出的cmdlet,它可以直接实时写入PowerShell主机窗口。 这是一种罕见的情况,当你可能确实想使用 Write-Host
.
然后,要做一些小的调整。 一般来说,你的事件处理程序行为应该在加入 $button
至 $Form
.
你做了一个名为 Button_click
但你把事件处理程序当作一个变量来添加。 下面是如何做到这一点的,通过创建一个变量,其中包含一个 {scriptblock}
:
$button_click = {write-host "hi Sahar"}
做完这些后,你的代码应该是这样的,它将会像预期的那样工作
$form = New-Object System.Windows.Forms.Form
$Button = New-Object System.Windows.Forms.Button
$Button.Location = New-Object System.Drawing.Size(35,35)
$Button.Size = New-Object System.Drawing.Size(120,23)
$Button.Text = "Show Dialog Box"
$Button.Add_Click($Button_Click)
$Form.Controls.Add($Button)
$form.showdialog()