如何在PowerShell表单中实现按钮点击次数的统计追踪
PowerShell 表单按钮点击统计实现方案
实现思路
- 用哈希表存储所有按钮的累计点击数据,键为按钮唯一标识,值为点击次数
- 所有按钮的点击事件中新增统计逻辑:触发继电器操作前先更新对应按钮的计数
- 可选持久化存储到本地文件,表单重启后仍可保留历史统计数据
完整示例代码
# 加载WinForms依赖 Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing # 初始化统计数据,支持本地持久化 $statFile = Join-Path $PSScriptRoot "relay_btn_stats.json" $btnClickStats = @{} # 启动时读取历史统计数据 if (Test-Path $statFile -PathType Leaf) { $btnClickStats = Get-Content $statFile -Raw | ConvertFrom-Json -AsHashtable } # 创建主表单 $mainForm = New-Object System.Windows.Forms.Form $mainForm.Text = "继电器控制工具" $mainForm.Size = New-Object System.Drawing.Size(300,250) # 示例按钮1:继电器1接通 $btnRelay1On = New-Object System.Windows.Forms.Button $btnRelay1On.Name = "Relay1_On" $btnRelay1On.Text = "继电器1 接通" $btnRelay1On.Location = New-Object System.Drawing.Point(30,30) $btnRelay1On.Size = New-Object System.Drawing.Size(200,40) $btnRelay1On.Add_Click({ # 更新点击统计 $btnClickStats[$this.Name] = $btnClickStats.ContainsKey($this.Name) ? ($btnClickStats[$this.Name] + 1) : 1 # 同步保存到本地文件 $btnClickStats | ConvertTo-Json | Set-Content $statFile -Encoding UTF8 # 下方替换为你的实际继电器接通逻辑 [System.Windows.Forms.MessageBox]::Show("继电器1已接通`n当前按钮累计点击:$($btnClickStats[$this.Name])次") }) $mainForm.Controls.Add($btnRelay1On) # 示例按钮2:继电器1断开 $btnRelay1Off = New-Object System.Windows.Forms.Button $btnRelay1Off.Name = "Relay1_Off" $btnRelay1Off.Text = "继电器1 断开" $btnRelay1Off.Location = New-Object System.Drawing.Point(30,90) $btnRelay1Off.Size = New-Object System.Drawing.Size(200,40) $btnRelay1Off.Add_Click({ # 更新点击统计 $btnClickStats[$this.Name] = $btnClickStats.ContainsKey($this.Name) ? ($btnClickStats[$this.Name] + 1) : 1 # 同步保存到本地文件 $btnClickStats | ConvertTo-Json | Set-Content $statFile -Encoding UTF8 # 下方替换为你的实际继电器断开逻辑 [System.Windows.Forms.MessageBox]::Show("继电器1已断开`n当前按钮累计点击:$($btnClickStats[$this.Name])次") }) $mainForm.Controls.Add($btnRelay1Off) # 统计查看按钮 $btnViewStats = New-Object System.Windows.Forms.Button $btnViewStats.Text = "查看所有按钮统计" $btnViewStats.Location = New-Object System.Drawing.Point(30,150) $btnViewStats.Size = New-Object System.Drawing.Size(200,40) $btnViewStats.Add_Click({ $statText = "按钮点击统计:`n" foreach($btnName in $btnClickStats.Keys) { $statText += "`n$btnName : $($btnClickStats[$btnName]) 次" } [System.Windows.Forms.MessageBox]::Show($statText) }) $mainForm.Controls.Add($btnViewStats) # 显示表单 $mainForm.ShowDialog() | Out-Null
可选调整说明
- 你可以将按钮的
Name属性改为更易读的中文名称,统计时会直接显示对应名称 - 如果不需要持久化存储,删除读写
relay_btn_stats.json的相关代码即可 - 若需要导出统计报表,可以将哈希表转换为CSV格式保存,代码为
$btnClickStats.GetEnumerator() | Export-Csv "统计报表.csv" -Encoding UTF8 -NoTypeInformation
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

