@Jordan_H

Как организовать цикл из динамически формирующихся элементов?

Как организовать цикл отключения combobox'ов из динамически формирующихся элементов имени combobox'ов?
Исходный код без оптимизации

function ClearOuList($count)
{
	#$comboboxOuNext1.DataSource = $null
	switch ($count) {
		1 {
			$comboboxOuNext1.visible = $false
			$comboboxOuNext2.visible = $false
			$comboboxOuNext3.visible = $false
			$comboboxOuNext4.visible = $false
			$comboboxOuNext5.visible = $false
			$comboboxOuNext6.visible = $false
			$comboboxOuNext7.visible = $false
			$comboboxOuNext8.visible = $false
			$comboboxOuNext9.visible = $false
			$comboboxOuNext10.visible = $false
		}
		2 {
			$comboboxOuNext2.visible = $false
			$comboboxOuNext3.visible = $false
			$comboboxOuNext4.visible = $false
			$comboboxOuNext5.visible = $false
			$comboboxOuNext6.visible = $false
			$comboboxOuNext7.visible = $false
			$comboboxOuNext8.visible = $false
			$comboboxOuNext9.visible = $false
			$comboboxOuNext10.visible = $false
		}
		3 {
			$comboboxOuNext3.visible = $false
			$comboboxOuNext4.visible = $false
			$comboboxOuNext5.visible = $false
			$comboboxOuNext6.visible = $false
			$comboboxOuNext7.visible = $false
			$comboboxOuNext8.visible = $false
			$comboboxOuNext9.visible = $false
			$comboboxOuNext10.visible = $false
		}
		4 {
			$comboboxOuNext4.visible = $false
			$comboboxOuNext5.visible = $false
			$comboboxOuNext6.visible = $false
			$comboboxOuNext7.visible = $false
			$comboboxOuNext8.visible = $false
			$comboboxOuNext9.visible = $false
			$comboboxOuNext10.visible = $false
		}
		5 {
			$comboboxOuNext5.visible = $false
			$comboboxOuNext6.visible = $false
			$comboboxOuNext7.visible = $false
			$comboboxOuNext8.visible = $false
			$comboboxOuNext9.visible = $false
			$comboboxOuNext10.visible = $false
		}
		6 {
			$comboboxOuNext6.visible = $false
			$comboboxOuNext7.visible = $false
			$comboboxOuNext8.visible = $false
			$comboboxOuNext9.visible = $false
			$comboboxOuNext10.visible = $false
		}
		7 {
			$comboboxOuNext7.visible = $false
			$comboboxOuNext8.visible = $false
			$comboboxOuNext9.visible = $false
			$comboboxOuNext10.visible = $false
		}
		8 {
			$comboboxOuNext8.visible = $false
			$comboboxOuNext9.visible = $false
			$comboboxOuNext10.visible = $false
		}
		9 {
			$comboboxOuNext9.visible = $false
			$comboboxOuNext10.visible = $false
		}
		10 {
			$comboboxOuNext10.visible = $false
		}
	}

Не понимание заключается в формировании имени combobox в цикле для его последующего отключения. Если формировать динамическое имя в цикле, из части имени необходимой переменной+переменной цикла (например: $comboboxOuNext$i, где $i=8), то получается теряется контроль над настоящим именем combobox, так как составная переменная является уже строковой переменной и у неё нет свойств типа visible, например. Такая переменная не является ссылкой на необходимый объект combobox и не является его настоящим именем, хоть визуально и идентично. Если создавать переменную типа combobox, то всё равно такая конструкция не работает, так как получается что это, видимо, другой внутрипроцедурный объект... Может существуют какие-нибудь указатели на нужные объекты, которые можно динамически формировать в циклах и которые будут правильно на них указывать?
  • Вопрос задан
  • 139 просмотров
Решения вопроса 1
@Dartar
Попробуйте вот так:
function ClearOuList($count)
{
  #$comboboxOuNext1.DataSource = $null
  switch ($count) {
    1 {
         Get-Variable -Name "comboboxOuNext[1-9]" | %{$_.Value.visible=$false
         Get-Variable -Name "comboboxOuNext10" | %{$_.Value.visible=$false
        }
    2 {
         Get-Variable -Name "comboboxOuNext[2-9]" | %{$_.Value.visible=$false
         Get-Variable -Name "comboboxOuNext10" | %{$_.Value.visible=$false
        }
    3 {
         Get-Variable -Name "comboboxOuNext[3-9]" | %{$_.Value.visible=$false
         Get-Variable -Name "comboboxOuNext10" | %{$_.Value.visible=$false
        }
    4 {
         Get-Variable -Name "comboboxOuNext[4-9]" | %{$_.Value.visible=$false
         Get-Variable -Name "comboboxOuNext10" | %{$_.Value.visible=$false
        }
    5{
         Get-Variable -Name "comboboxOuNext[5-9]" | %{$_.Value.visible=$false
         Get-Variable -Name "comboboxOuNext10" | %{$_.Value.visible=$false
        }
    6{
         Get-Variable -Name "comboboxOuNext[6-9]" | %{$_.Value.visible=$false
         Get-Variable -Name "comboboxOuNext10" | %{$_.Value.visible=$false
        }
    7 {
         Get-Variable -Name "comboboxOuNext[7-9]" | %{$_.Value.visible=$false
         Get-Variable -Name "comboboxOuNext10" | %{$_.Value.visible=$false
        }
    8 {
         Get-Variable -Name "comboboxOuNext[89]" | %{$_.Value.visible=$false
         Get-Variable -Name "comboboxOuNext10" | %{$_.Value.visible=$false
        }
    9 {
         Get-Variable -Name "comboboxOuNext9" | %{$_.Value.visible=$false
         Get-Variable -Name "comboboxOuNext10" | %{$_.Value.visible=$false
        }
    10 {
          Get-Variable -Name "comboboxOuNext10" | %{$_.Value.visible=$false
        }
  }
}
}

Так же можете рассмотреть квантификаторы:
Get-Variable * | ? {$_.name -match "comboboxOuNext[0-9]{1,2}"}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы