Amne
Amne

Reputation: 83

Why is this powershell code snippet not working?

This particular powershell code does not work for me, I'm wondering what I'm doing wrong here (I am in the process of learning Powershell - I am quite new to it)

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$main_form = New-Object System.Windows.Forms.Form
$main_form.Text = "Testing"
$main_form.Width = 500
$main_form.height = 300
$main_form.FormBorderStyle = "FixedDialog"
$main_form.AutoSize = $true
$main_form.MaximizeBox = $false
$main_form.MinimizeBox = $false

#
$SetCheckBox = New-Object System.Windows.Forms.Checkbox
$SetCheckBox.Location = New-Object System.Drawing.Point(10,10)
$SetCheckBox.Size = New-Object System.Drawing.Size(60,20)
$SetCheckBox.Text = "Set"
$main_form.Controls.Add($SetCheckBox)

if($SetCheckBox.Checked -eq $true){
    $SetButton = New-Object System.Windows.Forms.Button
    $SetButton.Location = New-Object System.Drawing.Point(280,200)
    $SetButton.Size = New-Object System.Drawing.Size(100,20)
    $SetButton.Text = "Nothing Selected"
    $SetButton.AutoSize = $true
    $main_form.Controls.Add($SetButton)
}else{

}

$RefreshButton = New-Object System.Windows.Forms.Button
$RefreshButton.Location = New-Object System.Drawing.Point(400,285)
$RefreshButton.Size = New-Object System.Drawing.Size(100,20)
$RefreshButton.Text = "Refresh"
$RefreshButton.AutoSize = $true
$main_form.Controls.Add($RefreshButton)

$RefreshButton.Add_Click({
    $main_form.Refresh()
})
#

$main_form.Topmost = $true
$main_form.ShowDialog()

I expect it to add a button to my form when "$SetCheckBox.Checked" equals to $true", but nothing happens. No error code or anything. Maybe this isn't how Powershell works?

Upvotes: 2

Views: 125

Answers (1)

Mark Harwood
Mark Harwood

Reputation: 2405

The problem is that you have everything setup, just not in the right place. You need to include the if statement inside the button press for it to be actioned. I didn't need to put a Refresh() in but I only tested in the ISE. This is currently working for me:

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

$main_form = New-Object System.Windows.Forms.Form
$main_form.Text = "Testing"
$main_form.Width = 500
$main_form.height = 300
$main_form.FormBorderStyle = "FixedDialog"
$main_form.AutoSize = $true
$main_form.MaximizeBox = $false
$main_form.MinimizeBox = $false

$SetCheckBox = New-Object System.Windows.Forms.Checkbox
$SetCheckBox.Location = New-Object System.Drawing.Point(10,10)
$SetCheckBox.Size = New-Object System.Drawing.Size(60,20)
$SetCheckBox.Text = "Set"
$main_form.Controls.Add($SetCheckBox)

$RefreshButton = New-Object System.Windows.Forms.Button
$RefreshButton.Location = New-Object System.Drawing.Point(400,285)
$RefreshButton.Size = New-Object System.Drawing.Size(100,20)
$RefreshButton.Text = "Refresh"
$RefreshButton.AutoSize = $true
$main_form.Controls.Add($RefreshButton)

$RefreshButton.Add_Click({
    if($SetCheckBox.Checked -eq $true){
        Write-Host "testing"
        $SetButton = New-Object System.Windows.Forms.Button
        $SetButton.Location = New-Object System.Drawing.Point(280,200)
        $SetButton.Size = New-Object System.Drawing.Size(100,20)
        $SetButton.Text = "Nothing Selected"
        $SetButton.AutoSize = $true
        $main_form.Controls.Add($SetButton)
    }else{
        Write-Host "testing2"
    }
})

$main_form.Topmost = $true
$main_form.ShowDialog()

Upvotes: 2

Related Questions