2010-09-10 4 views
1

J'ai donc une variable de type tableau de serveurs créée dynamiquement à partir d'un script externe. J'ai maintenant besoin de remplir mon formulaire GUI avec une liste de cases à cocher pour chaque serveur. Cela fonctionnera comme un mécanisme de sélection lors des déploiements sur les serveurs.Extension de variables dans une autre variable (Powershell)

Comme je ne sais pas combien de serveurs seront dans ma liste, les cases à cocher doivent être créées dynamiquement. Le problème que j'ai est de définir les paramètres de ces nouvelles variables, et d'ajouter au formulaire. Je ne comprends pas comment je peux forcer PS à développer ma variable itérateur dans le nom de la variable checkbox. Voici ce que j'ai actuellement, ce qui va créer mes variables mais pas appliquer les mises à jour des paramètres:

$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}) 


} 

Quelqu'un sait comment je peux faire correctement cette expansion ou la cession?

Répondre

2

d'abord à répondre à votre question:

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

Mais plus généralement, pourquoi ne pas stocker la liste des cases dans un tableau et d'y accéder par index?

Modifier: Laissez-moi vous montrer.

$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 pour utiliser un tableau pour stocker les CheckBox. –

+0

Excellent! Merci beaucoup pour votre aide, j'utiliserai certainement la méthode que vous suggérez. – Yanagi

Questions connexes