PowerShell GUI实现:选择下拉列表中JSON对象后获取对应CLRDIR与CLREXE属性值
实现WinForms下拉列表选择后显示对应JSON属性值的PowerShell脚本
你已经完成了下拉列表加载JSON对象名称的核心部分,接下来只需要添加文本框、按钮,并给按钮绑定点击事件,就能实现选择后显示对应属性的功能了。下面是完整的修改后的脚本,我会标注新增的关键部分:
# 加载并解析JSON文件(你的原有代码) $CLRJson = Get-Content -Raw -Path "C:\Temp\TESTKill.json" | ConvertFrom-Json $CLRObjects = $CLRJson.psobject.Properties.name # 获取所有对象名称 # 创建WinForms窗体(如果之前没创建,需要补充这部分) $objForm = New-Object System.Windows.Forms.Form $objForm.Text = "JSON属性查看器" $objForm.Size = New-Object System.Drawing.Size(300,200) # 创建下拉列表(你的原有代码) $objDropDownDBSchma = New-Object System.Windows.Forms.ComboBox $objDropDownDBSchma.Location = New-Object System.Drawing.Size(40,40) $objDropDownDBSchma.Size = New-Object System.Drawing.Size(200,20) $objForm.Controls.Add($objDropDownDBSchma) # 将JSON对象名称添加到下拉列表(你的原有代码) Foreach ($CLRObjekte in $CLRObjects) { $objDropDownDBSchma.items.Add($CLRObjekte) } # ------------------- 新增功能部分 ------------------- # 创建显示CLRDIR的文本框 $txtCLRDIR = New-Object System.Windows.Forms.TextBox $txtCLRDIR.Location = New-Object System.Drawing.Size(40,80) $txtCLRDIR.Size = New-Object System.Drawing.Size(200,20) $txtCLRDIR.ReadOnly = $true # 设置为只读,避免用户误修改 $objForm.Controls.Add($txtCLRDIR) # 创建显示CLREXE的文本框 $txtCLREXE = New-Object System.Windows.Forms.TextBox $txtCLREXE.Location = New-Object System.Drawing.Size(40,110) $txtCLREXE.Size = New-Object System.Drawing.Size(200,20) $txtCLREXE.ReadOnly = $true $objForm.Controls.Add($txtCLREXE) # 创建触发显示的按钮 $btnShowProps = New-Object System.Windows.Forms.Button $btnShowProps.Location = New-Object System.Drawing.Size(40,140) $btnShowProps.Size = New-Object System.Drawing.Size(200,25) $btnShowProps.Text = "显示对应属性" $objForm.Controls.Add($btnShowProps) # 给按钮绑定点击事件逻辑 $btnShowProps.Add_Click({ # 获取下拉框选中的对象名称 $selectedObj = $objDropDownDBSchma.SelectedItem if ($selectedObj) { # 从已加载的JSON对象中取出对应属性值 $clrDirValue = $CLRJson.$selectedObj.CLRDIR $clrExeValue = $CLRJson.$selectedObj.CLREXE # 将值赋值到文本框 $txtCLRDIR.Text = $clrDirValue $txtCLREXE.Text = $clrExeValue } else { # 未选中项时的提示与清空操作 $txtCLRDIR.Text = "" $txtCLREXE.Text = "" [System.Windows.Forms.MessageBox]::Show("请先选择一个对象!") } }) # ------------------- 新增功能结束 ------------------- # 显示窗体 $objForm.ShowDialog() | Out-Null
关键逻辑说明:
- 核心是保留了
$CLRJson变量,它存储了完整的JSON解析后的数据,这样点击按钮时可以直接通过选中的对象名称快速定位到对应的属性值。 - 给文本框设置
ReadOnly = $true,避免用户误修改显示的内容。 - 增加了空选择判断,提升了基础的用户体验,避免无意义的空值输出。
内容的提问来源于stack exchange,提问作者Keeran
相关产品推荐
相关产品推荐

