winforms - 在 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 ,因此它将不再被调用。
任何帮助都非常受欢迎。我的搜索得出的可靠答案为零。:-)
解决方案
您可以创建可以在事件处理程序中检查的脚本范围或全局范围的布尔变量。
用这个开始你的代码:
$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 }
推荐阅读
- python - AWS Lambda 上的 Flask + Selenium 应用程序
- javascript - 动态标记颜色highcharts
- database - Firestore:学术时间表结构
- google-bigquery - 如何使用字符串架构定义从 DataFlow 创建包含必填字段的 BigQuery 表?
- python - 如何使用 Python 将多边形对象列表转换为二维坐标列表
- angular - RequestOptions 类型的参数不能分配给 {headers} 类型的参数
- apache-spark - Spark 中 bigint 的兼容数据类型是什么?我们如何将 bigint 转换为 spark 兼容的数据类型?
- c# - 验证值是否存在于具有相同键名称的 Json 数组中
- excel - 比较单元格的值
- maven - CAS Maven Overlay 和 Spring Boot 不能一起工作