[英]Trying to make a basic Ping tool with a simple GUI, However at the moment the ping button does nothing even though I've defined it to have an action
然而,目前 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:\Tools\Pingtoool.txt
$form.Topmost = $true
$form.Add_Shown({$textBox.Select()})
$result = $form.ShowDialog()
如果有人可以看看并推荐更好的做事方式,我很乐意全神贯注。
谢谢你。
您只需要将您的事件存储为一个scriptblock
,除此之外,应该在将它添加到按钮的Click
事件之前定义scriptblock
。 我已经对您的代码进行了一些修改,现在就测试一下 :)
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
进行了更改,因为它是用于 ping 的 PowerShell 内置 cmdlet。$pinger = Ping 8.8.8.8 -t > C:\\Tools\\Pingtoool.txt
在解释这一行时正在执行,如果您想在单击按钮时执行这一行,您可以将代码存储为scriptblock
:$pinger = { Ping 8.8.8.8 -t > C:\Tools\Pingtoool.txt }
$Button.Add_Click($pinger)
也可以简化为:
$Button.Add_Click({
Ping 8.8.8.8 -t > C:\Tools\Pingtoool.txt
})
$Button.Add_Click($Button_Click)
线上, $Button_Click
在被定义之前被添加为一个event
,这就是为什么当你点击时什么都没有发生(除了之前提到的, event
不是一个scriptblock
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.