然而,目前ping按钮什么也不做,即使我已经定义了它有一个动作。
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form = New-Object System.Windows.Forms.Form
$form.Text = 'Data Entry Form'
$form.Size = New-Object System.Drawing.Size(400,400)
$form.StartPosition = 'CenterScreen'
$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 = "Ping"
$Button.Add_Click($Button_Click)
$Form.Controls.Add($Button)
$form.showdialog()
$Button_Click = $pinger
$pinger = Ping 8.8.8.8 -t > C:ToolsPingtoool.txt
$form.Topmost = $true
$form.Add_Shown({$textBox.Select()})
$result = $form.ShowDialog()
如果有人能看一看,或者建议更好的方法,我将乐意洗耳恭听。
谢谢。
您只需要将事件存储为scriptblock
,除此之外,scriptblock
应该在将其添加到按钮的Click
事件之前进行定义。我已经添加了一些修改你的代码,测试它现在:)
Add-Type -AssemblyName System.Windows.Forms, System.Drawing
$form = New-Object System.Windows.Forms.Form
$form.Text = 'Data Entry Form'
$form.Size = New-Object System.Drawing.Size(400,400)
$form.StartPosition = 'CenterScreen'
$form.Topmost = $true
$pingEvent = {
$file = New-TemporaryFile
Test-Connection 8.8.8.8 | Out-File $file
notepad.exe $file
}
$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 = "Ping"
$Button.Add_Click($pingEvent)
$Form.Controls.Add($Button)
$form.Add_Shown({$Button.Select()})
$result = $form.ShowDialog()
注意事项:
ping -t
将使您的GUI冻结,因为它将运行直到手动停止。ping
已更改为Test-Connection
,因为它是PowerShell的内置cmdlet用于ping。$pinger = Ping 8.8.8.8 -t > C:ToolsPingtoool.txt
在这行被解释的时候正在执行,如果你想在点击按钮时执行这行,你可以将代码存储为scriptblock
:
$pinger = { Ping 8.8.8.8 -t > C:ToolsPingtoool.txt }
$Button.Add_Click($pinger)
也可以简化为:
$Button.Add_Click({
Ping 8.8.8.8 -t > C:ToolsPingtoool.txt
})
- 在
$Button.Add_Click($Button_Click)
线上,$Button_Click
在被定义之前被添加为event
,这就是为什么当你点击什么都没有发生(除了之前提到的,event
不是scriptblock
)。