自动生成字段变量

时间:2018-10-22 11:05:51

标签: powershell user-interface wmi

我使用以下代码在Powershell GUI上生成复选框-

$databases_checkBox_1 = New-Object system.windows.Forms.CheckBox
$databases_checkbox_1.Width = 200
$databases_checkBox_1.location = new-object system.drawing.point(245,$y)
$y=$y+30

$databases_checkBox_2 = New-Object system.windows.Forms.CheckBox
$databases_checkbox_2.Width = 200
$databases_checkBox_2.location = new-object system.drawing.point(245,$y)
$y=$y+30

$databases_checkBox_3 = New-Object system.windows.Forms.CheckBox
$databases_checkbox_3.Width = 200
$databases_checkBox_3.location = new-object system.drawing.point(245,$y)
$y=$y+30

$databases_checkBox_4 = New-Object system.windows.Forms.CheckBox
$databases_checkbox_4.Width = 200
$databases_checkBox_4.location = new-object system.drawing.point(245,$y)
$y=$y+30

但是我想生成“ X”数量的复选框,因为该列表可能多达一百个-知道如何使它们自动生成吗?

2 个答案:

答案 0 :(得分:1)

与要创建的复选框数量一样,在循环中运行复选框创建代码(不要忘记在创建控件后将其添加到表单中)。在每次迭代结束时,输出创建的对象,并将循环的所有输出收集到一个变量中:

$checkboxes = 0..3 | ForEach-Object {
    $cb = New-Object Windows.Forms.CheckBox
    $cb.Width = 200
    $cb.Location = New-Object Drawing.Point(245, $y)
    $y += 30

    $form.Controls.Add($cb)

    $cb
}

一旦有了,您就可以通过数组中每个复选框的索引来访问它们。例如:

$checkboxes[2].Checked

将为您提供第三个复选框的“已检查”状态(PowerShell阵列从零开始)。

答案 1 :(得分:0)

不是最漂亮的解决方案,但它应该可以工作。在此示例中,仅创建5个变量(0..4

$y = 0
0..4 | foreach {
    $currentVar = New-Variable -Name databases_checkBox_$_ -Value $(New-Object System.Windows.Forms.CheckBox) -PassThru
    $currentVar.Value.Width = 200
    $currentVar.Value.Location = New-Object System.Drawing.Point(245,$y)
    $y = $y+30
}

您可以通过运行Get-Variable databases_checkBox*进行仔细检查。

话虽这么说-如果您追赶成百上千的人,它将很快变得混乱不堪。请以Ansgar的评论作为建议。