基于WMI返回值设置Windows Forms窗体按钮启用状态
解决Windows Forms窗体加载时根据电源状态设置按钮启用状态
你的核心需求是窗体打开时立即根据设备是否连接电源来设置按钮的启用状态,原代码的问题在于用了Validating事件——这个事件是在按钮需要验证输入时才触发,根本不会在窗体加载时执行。下面是修正后的实现:
Add-Type -AssemblyName System.Windows.Forms [System.Windows.Forms.Application]::EnableVisualStyles() $Form = New-Object system.Windows.Forms.Form $Form.ClientSize = New-Object System.Drawing.Point(400,400) $Form.text = "电源状态检测窗体" $Form.TopMost = $false $Button1 = New-Object system.Windows.Forms.Button $Button1.text = "仅电源连接时可用" $Button1.width = 150 $Button1.height = 30 $Button1.location = New-Object System.Drawing.Point(125,289) $Button1.Font = New-Object System.Drawing.Font('Microsoft Sans Serif',10) $Form.controls.AddRange(@($Button1)) Function Get-BatteryHealthCheck { # 真实获取电源连接状态:PowerOnLine为True表示已连接电源 $TestResult = (Get-WmiObject -Class BatteryStatus -Namespace root\wmi -ComputerName $env:COMPUTERNAME).PowerOnLine # 直接赋值,简化逻辑 $Button1.Enabled = $TestResult } # 窗体加载时立即执行电源检查 $Form.Add_Load({ Get-BatteryHealthCheck }) # 也可以直接在显示窗体前调用,效果一致 # Get-BatteryHealthCheck [void]$Form.ShowDialog()
关键修改说明:
- 启用真实的WMI查询,去掉硬编码的测试值,现在能准确获取设备电源连接状态
- 将检查逻辑绑定到窗体
Load事件,确保窗体打开瞬间就完成按钮状态初始化 - 简化按钮状态赋值:直接把WMI返回的布尔值赋值给
$Button1.Enabled,无需多余的if-else判断 - 移除无用的
Add_Validating绑定,该事件和你的初始化需求完全不匹配
如果需要实时监测电源插拔状态(比如用户中途插拔电源时自动更新按钮),还可以添加系统电源事件监听,但根据你的需求,窗体打开时的初始化逻辑已经足够满足要求。
内容的提问来源于stack exchange,提问作者SamTn
相关产品推荐
相关产品推荐

