如何列出表单中的所有控件,其中(name)-property以spesific开头,然后在foreach中使用?
我有多个groupboxes
多个tabpages
,其中name
以gbs
开头(例如:gbs1,gbs2,gbs3 ++) 。现在我想禁用所有以gbs*
开头的组合框,只需点击一下按钮,而不必手动列出所有组框。
我试过查一下,但我找不到好的文档。我可能正在寻找错误的词......
我猜这是一个开始,而且就我而言,但我不确定从这里开始,或者我离开的地方;
$list = @($MainForm.Controls.Find -like 'gbs*')
foreach ($item in $list){$item.enabled = $false} #Just a example of what I'm thinking
目的: 我正在创建一个.exe表单,它将自动化活动目录。表单包含一组设置,所有这些设置都在这些组框中。我将要有一个'编辑模式',这样当它处于活动状态时 - 组框已启用。当没有,禁用。
解决方案,感谢来自@Clijsters的帮助:
#Get all the tabpages
$script:tabpages = $tabTasks.Controls | Where-Object { $_.Name -like "tp*" } | select Name, Controls
$script:tabpages += $tabSettings.Controls | Where-Object { $_.Name -like "tp*" } | select Name, Controls
#Get groupboxes in tabpages
$script:groupboxes = [System.Object]$tabpages.Controls
#Disable
$groupboxes | Where-Object { $_.Name -like "gbs*" } | ForEach-Object { $_.Enabled = $true }
答案 0 :(得分:1)
要查找列表中的项目,Where-Object
是您选择的CmdLet!
在你的情况下像
$list = $MainForm.Controls | Where-Object {$_.Name -like "gbs*"}
会正常工作。您可以将结果存储在变量中(如上所示)并在foreach
中使用它,或将结果列表直接传递给ForEach-Object
并在下面处理它,如下所示:
$MainForm.Controls | Where-Object {$_.Name -like "gbs*"} | ForEach-Object {Do Something}