首页 > 解决方案 > 在 Powershell、Win Forms GUI 中,有没有办法动态打开/关闭某些事件

问题描述

我有一个使用 Windows 窗体创建 GUI 的 powershell 脚本。我希望某些控件在一段时间内捕获单击和击键事件,然后停止(即不再需要监视该事件和/或调用事件处理程序函数)。

我没有看到像 Remove_click() 或 Clear_Keypress() 或类似的函数来停止对 event_handler 的调用。(Add_click() 和 Add_keypress() 方法的补充)。

我期待找到一种清除、重置或删除等效方法?或者有没有办法删除对事件处理函数的引用,从而不再调用该函数?比如,将 func 指针设置为 $null?

创建代码片段如下所示:

$someButton = New-Object System.Windows.Forms.Button
$someButton.Add_Click({c_eventHandler})
$form.Controls.Add($someButton)
$someBox = New-Object System.Windows.Forms.TextBox
$someBox.Add_KeyPress({kp_eventHandler})
$form.Controls.Add($someBox)

我希望有类似的东西:

$someBox.Remove_Keypress() or 
$someBox.Clear_Keypress()

或者以某种方式将事件处理函数指针 $null ,因此它将不再被调用。

任何帮助都非常受欢迎。我的搜索得出的可靠答案为零。:-)

标签: winformspowershelleventsonclicklistenerkeyboard-events

解决方案


您可以创建可以在事件处理程序中检查的脚本范围或全局范围的布尔变量。

用这个开始你的代码:

$processClick, $processKeyPress = $true

并将处理程序更改为:

$someButton.Add_Click({if ($script:processClick) {c_eventHandler}})
$someBox.Add_KeyPress({if ($script:processKeyPress) {kp_eventHandler}})

接下来,在某个时间点或根据某些条件,将一个或两个变量设置为$false

if ($theConditionToStopClickProcessing) { $script:processClick = $false }

推荐阅读