我有一个组成WinForms UI的PowerShell脚本。以下是相关的位:
function onVrViewLoad() {
var vrView = new VRView.Player('#vrview', {
image: 'https://cors-anywhere.herokuapp.com/<?php echo $value['image_path'] ?>',
width:'500px',
height:'300px'
});
}
运行程序时,我将得到一个PowerShell控制台窗口和UI(如预期的那样)。当我单击主窗体控件框“ X”时,功能cls
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
Function FormClosed()
{
$global:Canceled = $true
}
$global:MainForm = New-Object 'System.Windows.Forms.Form'
$global:MainForm.add_FormClosed({FormClosed})
$global:MainForm.ShowDialog()
被调用(如预期)。但是,文本FormClosed
意外出现在控制台窗口中。
我在函数Cancel
中的$global:Canceled = $true
上设置了一个断点。在此断点处,我步进,然后看到执行指针位于FormClosed
中的}
上。我又走了一步,控制台窗口中出现了文本$global:MainForm.add_FormClosed({FormClosed})
。因此,我假设.NET Cancel
事件正在触发我的FormClosed
函数(如预期的那样),而我的FormClosed
函数正在发出文本FormClosed
。我假设文本Cancel
源自.NET Cancel
事件。
如何禁止我的FormClosed
函数发出文本FormClosed
?
答案 0 :(得分:1)
Cancel
是从ShowDialog
方法而不是事件处理程序返回的。您可以将其发送给Null:
$global:MainForm.ShowDialog() | Out-Null
请参见ShowDialog
返回值类型(https://msdn.microsoft.com/en-us/library/c7ykbedk(v=vs.110).aspx)和DialogResult
值(https://msdn.microsoft.com/en-us/library/system.windows.forms.dialogresult(v=vs.110).aspx)。