Powershell形式:如何根据name-property查找控件

时间:2017-10-10 12:18:38

标签: winforms powershell

如何列出表单中的所有控件,其中(name)-property以spesific开头,然后在foreach中使用?

我有多个groupboxes多个tabpages,其中namegbs 开头(例如: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 }

1 个答案:

答案 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}