2010-09-10 3 views
1

Итак, у меня есть переменная массива серверов, динамически созданная из внешнего скрипта. Теперь мне нужно заполнить форму своего графического интерфейса списком флажков для каждого сервера. Это будет работать как механизм выбора при развертывании на упомянутые серверы.Переменная Расширение в пределах другой переменной (Powershell)

Поскольку я не знаю, сколько серверов будет в моем списке, эта форма должна будет иметь флажки, созданные динамически. Проблема, с которой я столкнулась, заключается в настройке параметров этих новых переменных и добавлении в форму. Я просто не понимаю, как я могу заставить PS расширить мою переменную итератора в имени переменной флажка. Вот что я в настоящее время, которые будут создавать свои переменные, но не применить обновления параметров:

$form1.Text = "Server Selection" 
$form1.Name = "form1" 
$form1.DataBindings.DefaultDataSourceUpdateMode = 0 
$System_Drawing_Size = New-Object System.Drawing.Size 
$System_Drawing_Size.Width = 235 
$System_Drawing_Size.Height = 500 
$form1.ClientSize = $System_Drawing_Size 
$i = 0 
$y = 0 
$serverList | %{ 
    New-Variable -Name "Checkbox$i" -value (New-Object System.Windows.Forms.CheckBox) 
    set-variable -name "Checkbox$i.VisualStyleBackColor" -value $true 
    $System_Drawing_Size = New-Object System.Drawing.Size 
    $System_Drawing_Size.Width = 104 
    $System_Drawing_Size.Height = 24 
    $Checkbox{i}.Size = $System_Drawing_Size 
    $Checkbox{i}.TabIndex = $i 
    $Checkbox{i}.text = $_ 
    $System_Drawing_Point = New-Object System.Drawing.Point 
    $System_Drawing_Point.X = 60 
    $System_Drawing_Point.Y = 21 + $y 
    $Checkbox{i}.Location = $System_Drawing_Point 
    $Checkbox{i}.DataBindings.DefaultDataSourceUpdateMode = 0 
    $Checkbox{i}.name = "server" 
    $y = $y + 20 
    $i++ 
    $form1.Controls.Add($Checkbox{i}) 


} 

Каждый знает, как я могу сделать это расширение или назначение правильно?

ответ

2

Прежде, чтобы ответить на ваш конкретный вопрос:

(Get-Variable "Checkbox$i").Value.Size = $System_Drawing_Size 

Но в более общем плане, почему бы вам не хранить список флажков в массиве и доступ к ним по индексу?

Редактировать: Позвольте мне показать вам.

$Checkboxes = @() 
$serverList | %{ 
    $Checkboxes += New-Object System.Windows.Forms.CheckBox 
    $Checkboxes[-1].VisualStyleBackColor = $true 
    $System_Drawing_Size = New-Object System.Drawing.Size 
    $System_Drawing_Size.Width = 104 
    $System_Drawing_Size.Height = 24 
    $Checkboxes[-1].Size = $System_Drawing_Size 
    $Checkboxes[-1].TabIndex = $i 
    $Checkboxes[-1].text = $_ 
    $System_Drawing_Point = New-Object System.Drawing.Point 
    $System_Drawing_Point.X = 60 
    $System_Drawing_Point.Y = 21 + $y 
    $Checkboxes[-1].Location = $System_Drawing_Point 
    $Checkboxes[-1].DataBindings.DefaultDataSourceUpdateMode = 0 
    $Checkboxes[-1].name = "server" 
    $y = $y + 20 
    $form1.Controls.Add($Checkboxes[-1]) 
} 
+1

+1 для использования массива для хранения CheckBoxes. –

+0

Отлично! Большое спасибо за вашу помощь, я обязательно буду использовать метод, который вы предлагаете. – Yanagi

Смежные вопросы