2010-09-10 78 views
1

所以我有一个从外部脚本动态创建的服务器的数组变量。 我现在需要用每个服务器的复选框列表填充我的GUI窗体。这将作为部署到所述服务器时的选择机制。变量扩展在另一个变量(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使用数组来存储复选框。 – 2010-09-10 02:49:05

+0

优秀!非常感谢您的帮助,我一定会使用您建议的方法。 – Yanagi 2010-09-10 20:46:30