如何抑制事件处理功能发出不需要的文本?

时间:2018-07-27 14:31:28

标签: .net winforms powershell event-handling

我有一个组成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

1 个答案:

答案 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)。