PowerShell创建ProgressBar控件后如何修改其值?
在PowerShell中修改WinForms ProgressBar控件的数值
你之前尝试的ProgessBar'1p1'.value = 50写法不符合PowerShell语法规则,所以无法生效。下面提供两种可靠的方法来修改这些ProgressBar的数值:
方法1:通过窗体Controls集合查找控件
利用窗体的Controls.Find()方法,根据控件名称定位到目标ProgressBar,再修改其Value属性:
# 查找名称为'1p1'的ProgressBar控件($false表示不递归查找子控件) $targetBar = $Bars.Controls.Find('1p1', $false)[0] # 设置进度值为50 $targetBar.Value = 50
方法2:创建控件时保存引用到哈希表(更高效)
在创建ProgressBar的过程中,把每个控件的引用存入哈希表,后续直接通过哈希表访问控件会更快捷,尤其适合频繁操作多个控件的场景:
修改你的控件创建代码如下:
$ProgressBarName =@('1p1', '1p2', '2p1', '2p2', '3p1', '3p2') # 初始化哈希表存储控件引用 $progressBarMap = @{} $i = 0 $ProgressBarName | foreach{ $CurrentProgressBar = New-Object system.Windows.Forms.ProgressBar $CurrentProgressBar.name = $ProgressBarName[$i] $CurrentProgressBar.width = 200 $CurrentProgressBar.height = 5 $CurrentProgressBar.location = "10,$(10+20*$i)" # 将当前控件存入哈希表,键为控件名称 $progressBarMap[$CurrentProgressBar.name] = $CurrentProgressBar $i++ $Bars.Controls.Add($CurrentProgressBar) } # 直接通过哈希表修改指定ProgressBar的数值 $progressBarMap['1p1'].Value = 50 $progressBarMap['2p2'].Value = 75
注意:如果需要在窗体显示(ShowDialog())之后动态修改进度值,需要借助事件处理或后台线程——因为ShowDialog()会阻塞当前线程,直到窗体关闭。比如可以添加按钮控件,在按钮点击事件里实现进度值修改。
内容的提问来源于stack exchange,提问作者Bernhard
相关产品推荐
相关产品推荐

