2017-10-10 42 views
1

如何在我的窗體中列出所有控件,其中(名稱) - 屬性以某種特定開頭,然後在foreach中使用它?Powershell窗體:如何根據名稱屬性找到控件

我有下多個tabpages多個groupboxes其中name開始於gbs(實施例:gbs1,gbs2,gbs3 ++)。現在我想禁用所有以gbs*開頭的groupebox,而不必手動列出所有的groupbox。

我試過查看它,但是我找不到它的好文檔。我可能正在尋找錯誤的詞...

我猜這是一個開始,而且就我而言,但我不知道該從哪裏走,或者如果我是離開;

$list = @($MainForm.Controls.Find -like 'gbs*') 

foreach ($item in $list){$item.enabled = $false} #Just a example of what I'm thinking 

目的: 我創建會自動Active Directory中的.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

所以你正在尋找類似'$列表= $ MainForm.childNodes | Where-Object {$ _。Name-like「gbs *」}'? – Clijsters

+0

...你的腳本的上下文是什麼?一個Internet Explorer實例? '調用,WebRequest'? – Clijsters

+0

感謝您的回覆,@Clijsters。這是一個通過一系列方式自動執行活動目錄的程序。我想要做的是使用這種「編輯模式」,其中包含設置的所有組框(這是很多設置)將被禁用或啓用天氣您處於編輯模式或不。 ---我試過'$ MainForm.Controls | Where-Object {$ _。Name-like「gbs *」}'這確實給了我一份清單,太棒了!然而,我認爲通過使用'$ mainform'它會包含tabpages等,它似乎沒有做到。大部分的組合框都在標籤頁中。當然我會再測試一些。 – MadsTheMan

回答

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} 
+0

謝謝你的回答。我一直在玩這個,也是在標籤頁(你告訴我它有自己的容器) - 現在我可以列出所有的標籤頁中的組框,並使用ForEach-Object來處理它們。這是完美的,再次感謝! – MadsTheMan

+0

不錯!別客氣。你是如何瀏覽控件的標籤? – Clijsters

+0

我添加了一段代碼,現在我已經結束了這個問題的底部,以供您查看:) _(在評論中解釋會有點冗長和混亂 - 也許別人會覺得它有用) ._ – MadsTheMan