【问题标题】:Making a powershell form button call to a function对函数进行 powershell 表单按钮调用
【发布时间】:2023-03-31 10:32:01
【问题描述】:

我正在尝试使用 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"}

但是点击按钮不会给我任何结果,我在这里做错了什么?

【问题讨论】:

  • 调用$Button.Add_Click($function:Button_Click)函数定义完成
  • 如果你真的在使用 GUI,为什么要把它写到控制台?只需将文本添加到表单元素或添加要写入的 UI 元素(文本框、列表框等)。

标签: forms powershell user-interface button onclick


【解决方案1】:

您使用的是 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()

【讨论】:

  • 本可以使用 --- $button_click = {$env:USERNAME | Out-Host} --- 也因此避免了 Write-* 的东西。
  • 如果回复有帮助,记得投票并标记为答案:)
猜你喜欢
  • 2019-07-21
  • 1970-01-01
  • 2019-07-31
  • 1970-01-01
  • 2022-11-14
  • 2017-04-21
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多