繁体   English   中英

试图用一个简单的 GUI 制作一个基本的 Ping 工具,但是目前 ping 按钮什么都不做,即使我已经定义了它有一个动作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM