在Powershell中捕获Windows窗体关闭事件

3

我有一个Windows窗体。当我点击Windows窗体控制框中的关闭(X)按钮时,我想要显示一个消息或者做一些事情。

以下是代码:

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
[void] [System.Windows.Forms.Application]::EnableVisualStyles() 

$frmTest = New-Object System.Windows.Forms.Form
$frmTest.Size = New-Object System.Drawing.Size(640,480)
$frmTest.MaximizeBox = $False
$frmTest.ShowDialog()

当用户点击关闭(X)按钮时,我想显示一个消息框:
$choice = [System.Windows.Forms.MessageBox]::Show('Are you you want to exit?','TEST','YesNo','Error')
switch($choice)
{
    'Yes'
     {
         $frmTest.Close()

     }
}

我发现了这篇文章:Form Close 消息,但是我不太清楚如何使用它。请给予建议。谢谢。

1个回答

6

需要捕获的事件是窗体的 Closing 事件,该事件有一个事件参数,可以让您取消该事件。如果想要了解如何在 PowerShell 中使用事件参数,可以参考Windows Forms 控件事件 - 使用 Sender 和 EventArgs

示例

Add-Type -AssemblyName System.Windows.Forms
$form = New-Object System.Windows.Forms.Form
$form.Text ="Test"
$form.Add_Closing({param($sender,$e)
    $result = [System.Windows.Forms.MessageBox]::Show(`
        "Are you sure you want to exit?", `
        "Close", [System.Windows.Forms.MessageBoxButtons]::YesNoCancel)
    if ($result -ne [System.Windows.Forms.DialogResult]::Yes)
    {
        $e.Cancel= $true
    }
})
$form.ShowDialog() | Out-Null
$form.Dispose()

代码已经测试过并且按预期工作。是的,智能感知不会为事件显示自动完成。但这是处理事件的方式。 - Reza Aghaei
还有一个问题:如果我有一个名为“取消”的按钮,如何调用窗体关闭事件方法? - Rajiv Iyer
没问题。你不需要调用事件处理程序,而是执行某些操作来引发事件,然后由事件处理程序处理,例如$form.Close()将引发$form的Closing事件。 - Reza Aghaei
没问题,很酷。 - Reza Aghaei
当然,我很乐意。 - Rajiv Iyer
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接