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

  • Вопрос

  • Не понимание заключается в формировании имени combobox в цикле для его последующего отключения. Если формировать динамическое имя в цикле, из части имени необходимой переменной+переменной цикла (например: $comboboxOuNext$i, где $i=8), то получается теряется контроль над настоящим именем combobox, так как составная переменная является уже строковой переменной и у неё нет свойств типа visible, например. Такая переменная не является ссылкой на необходимый объект 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
    		}
    	}

    1 августа 2019 г. 8:28

Ответы

  • Вопрос был решён таким образом:

    function ClearOuList($count)
    {
      for ($i = $count; $i -lt 10; $i++)
      {
        Get-Variable -Name "comboboxOuNext$i" | %{
          $_.Value.visible = $false
        }
      }
    }

    • Помечено в качестве ответа RootGadger 16 августа 2019 г. 11:35
    16 августа 2019 г. 11:35

Все ответы

  • Добрый день,

      Можно попробовать использовать массив (array)

    # создание первого элемента
    $comboBox =@(New-Object System.Windows.Forms.ComboBox)
    
    #Обращение к элементу
    $comboBox[0].Visible=$false
    
    #Динамическое добавление нового комбобокса
    $comboBox += New-Object System.Windows.Forms.ComboBox
    
    #Обращение ко второму элементу
    $comboBox[1].Visible=$false
    
    

    1 августа 2019 г. 8:50
  • попробуйте

    ${comboboxOuNext$i}


    The opinion expressed by me is not an official position of Microsoft

    1 августа 2019 г. 11:06
    Модератор
  • Вопрос был решён таким образом:

    function ClearOuList($count)
    {
      for ($i = $count; $i -lt 10; $i++)
      {
        Get-Variable -Name "comboboxOuNext$i" | %{
          $_.Value.visible = $false
        }
      }
    }

    • Помечено в качестве ответа RootGadger 16 августа 2019 г. 11:35
    16 августа 2019 г. 11:35