1

So I've an array-variable of servers that is dynamically created from an external script. I now need to populate my GUI form with a list of check-boxes for each server. This will work as a selection mechanism when doing deployments to said servers.

As I don't know how many servers are going to be in my list, this form will have to have the check-boxes created dynamically. The issue I'm having is setting parameters of these new variables, and adding to the form. I just don't get how I can force PS to expand my iterator variable within the checkbox variable name. Here's what I have currently, which will create my variables but not apply the updates to the parameters:

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


}

Anyone know how I can do this expansion or assignment correctly?

1 Answer 1

2

First to answer your specific question:

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

But more generally, why don't you store the list of checkboxes in an array and access them by index?

Edit: Let me show you.

$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])
}
Sign up to request clarification or add additional context in comments.

1 Comment

Excellent! Thanks so much for your help, I shall definitely use the method you suggest.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.