ofribouba
ofribouba

Reputation: 27

If is not working in If-elseif statement

Im writing a code which asks the user to mark certain files that he wants and then it creates a file and changes it accordingly, just wrote hello for now.

The problem is that it only works in the if section, and not in the else if. I couldn't find an answer online.

Here is my code:

 [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
 [void] [System.Reflection.Assembly]::LoadWithPartialName    ("System.Windows.Forms") 

 #This creates the path for the Json
 New-Item c:\users\$env:USERNAME\documents -ItemType directory -Name Json

 #creating the form
 $objForm = New-Object System.Windows.Forms.Form 
 $objForm.Text = "Ofir`s script"
 $objForm.Size = New-Object System.Drawing.Size(270,200) 
 $objForm.StartPosition = "CenterScreen"

 #creating the label
 $objLabel = New-Object System.Windows.Forms.Label
 $objLabel.Location = New-Object System.Drawing.Size(10,20) 
 $objLabel.Size = New-Object System.Drawing.Size(280,20) 
 $objLabel.Text = "Please check the relevant boxes:"
 $objForm.Controls.Add($objLabel)

 #This creates a checkbox called dsp.z
 $objDspCheckbox = New-Object System.Windows.Forms.Checkbox 
 $objDspCheckbox.Location = New-Object System.Drawing.Size(10,40) 
 $objDspCheckbox.Size = New-Object System.Drawing.Size(500,20)
 $objDspCheckbox.Text = "dsp.z"
 $objDspCheckbox.TabIndex = 0
 $objForm.Controls.Add($objDspCheckbox)

 #This creates a checkbox called fpga.bin
 $objFpgaCheckbox = New-Object System.Windows.Forms.Checkbox 
 $objFpgaCheckbox.Location = New-Object System.Drawing.Size(10,60) 
 $objFpgaCheckbox.Size = New-Object System.Drawing.Size(500,20)
 $objFpgaCheckbox.Text = "fpga.bin"
 $objFpgaCheckbox.TabIndex = 1
 $objForm.Controls.Add($objFpgaCheckbox)

 #This creates a checkbox called bootrom_uncmp.bin
 $objBootCheckbox = New-Object System.Windows.Forms.Checkbox 
 $objBootCheckbox.Location = New-Object System.Drawing.Size(10,80) 
 $objBootCheckbox.Size = New-Object System.Drawing.Size(500,20)
 $objBootCheckbox.Text = "bootrom_uncmp.bin"
 $objBootCheckbox.TabIndex = 2
 $objForm.Controls.Add($objBootCheckbox)

 #ok Button 
 $OKButton = New-Object System.Windows.Forms.Button
 $OKButton.Location = New-Object System.Drawing.Size(40,120)
 $OKButton.Size = New-Object System.Drawing.Size(75,23)
 $OKButton.Text = "OK"
 $OKButton.Add_Click({if ($objDspCheckbox.Checked -eq $true)
 {
 New-Item c:\users\$env:USERNAME\documents\Json -itemtype file -name file.json -value "Hello" ;$objForm.close()}
 }
 )

 elseif ($objFpgaCheckbox.Checked -eq $true)
 {
 New-Item c:\users\$env:USERNAME\documents\Json -itemtype file -name file.json -value "Hello2" ;$objForm.close()
 }

 elseif ($objBootCheckbox.Checked -eq $true)
 {
 New-Item c:\users\$env:USERNAME\documents\Json -itemtype file -name file.json -value "Hello3" ;$objForm.close()
 }

 $objForm.Controls.Add($OKButton)



 #cancle Button
 $CancelButton = New-Object System.Windows.Forms.Button
 $CancelButton.Location = New-Object System.Drawing.Size(140,120)
 $CancelButton.Size = New-Object System.Drawing.Size(75,23)
 $CancelButton.Text = "Cancel"
 $CancelButton.Add_Click({$objForm.Close()})
 $objForm.Controls.Add($CancelButton)


 #makes the form appear on top of the screen
 $objForm.Topmost = $True

 $objForm.Add_Shown({$objForm.Activate()})
 [void] $objForm.ShowDialog()

Upvotes: 1

Views: 40

Answers (2)

Ranadip Dutta
Ranadip Dutta

Reputation: 9133

This is working fine now with the elseif . I have made few improvements like if the json folder is already existing then it was throwing error . So I am checking on prior that if the folder is already there then do not create or overwrite. Use that same folder and create the Json file under that. If the folder is not present then only create it.

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
 [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 

 #This creates the path for the Json and also check if it is already there.
 If(!(Test-Path -Path C:\Users\$env:USERNAME\documents\Json))
 {
 New-Item c:\users\$env:USERNAME\documents -ItemType directory -Name Json
 }
 #creating the form
 $objForm = New-Object System.Windows.Forms.Form 
 $objForm.Text = "Ofir`s script"
 $objForm.Size = New-Object System.Drawing.Size(270,200) 
 $objForm.StartPosition = "CenterScreen"

 #creating the label
 $objLabel = New-Object System.Windows.Forms.Label
 $objLabel.Location = New-Object System.Drawing.Size(10,20) 
 $objLabel.Size = New-Object System.Drawing.Size(280,20) 
 $objLabel.Text = "Please check the relevant boxes:"
 $objForm.Controls.Add($objLabel)

 #This creates a checkbox called dsp.z
 $objDspCheckbox = New-Object System.Windows.Forms.Checkbox 
 $objDspCheckbox.Location = New-Object System.Drawing.Size(10,40) 
 $objDspCheckbox.Size = New-Object System.Drawing.Size(500,20)
 $objDspCheckbox.Text = "dsp.z"
 $objDspCheckbox.TabIndex = 0
 $objForm.Controls.Add($objDspCheckbox)

 #This creates a checkbox called fpga.bin
 $objFpgaCheckbox = New-Object System.Windows.Forms.Checkbox 
 $objFpgaCheckbox.Location = New-Object System.Drawing.Size(10,60) 
 $objFpgaCheckbox.Size = New-Object System.Drawing.Size(500,20)
 $objFpgaCheckbox.Text = "fpga.bin"
 $objFpgaCheckbox.TabIndex = 1
 $objForm.Controls.Add($objFpgaCheckbox)

 #This creates a checkbox called bootrom_uncmp.bin
 $objBootCheckbox = New-Object System.Windows.Forms.Checkbox 
 $objBootCheckbox.Location = New-Object System.Drawing.Size(10,80) 
 $objBootCheckbox.Size = New-Object System.Drawing.Size(500,20)
 $objBootCheckbox.Text = "bootrom_uncmp.bin"
 $objBootCheckbox.TabIndex = 2
 $objForm.Controls.Add($objBootCheckbox)

 #ok Button 
 $OKButton = New-Object System.Windows.Forms.Button
 $OKButton.Location = New-Object System.Drawing.Size(40,120)
 $OKButton.Size = New-Object System.Drawing.Size(75,23)
 $OKButton.Text = "OK"
 $OKButton.Add_Click(
    {
    if($objDspCheckbox.Checked -eq $true)
        {
            New-Item c:\users\$env:USERNAME\documents\Json -itemtype file -name file.json -value "Hello" ;$objForm.close()
        }

    elseif($objFpgaCheckbox.Checked -eq $true)
        {
            New-Item c:\users\$env:USERNAME\documents\Json -itemtype file -name file.json -value "Hello2" ;$objForm.close()
        }
    elseif($objBootCheckbox.Checked -eq $true)
        {
            New-Item c:\users\$env:USERNAME\documents\Json -itemtype file -name file.json -value "Hello3" ;$objForm.close()
        }
    }
    )


 $objForm.Controls.Add($OKButton)



 #cancle Button
 $CancelButton = New-Object System.Windows.Forms.Button
 $CancelButton.Location = New-Object System.Drawing.Size(140,120)
 $CancelButton.Size = New-Object System.Drawing.Size(75,23)
 $CancelButton.Text = "Cancel"
 $CancelButton.Add_Click({$objForm.Close()})
 $objForm.Controls.Add($CancelButton)


 #makes the form appear on top of the screen
 $objForm.Topmost = $True

 $objForm.Add_Shown({$objForm.Activate()})
 [void] $objForm.ShowDialog()

Upvotes: 0

Martin Brandl
Martin Brandl

Reputation: 58931

You have a curly-bracket in this line:

New-Item c:\users\$env:USERNAME\documents\Json -itemtype file -name file.json -value "Hello" ;$objForm.close()}

So change the click handler to:

$OKButton.Add_Click(
 {
     if ($objDspCheckbox.Checked -eq $true)
     {
        New-Item c:\users\$env:USERNAME\documents\Json -itemtype file -name file.json -value "Hello" ;$objForm.close()
     }

     elseif ($objFpgaCheckbox.Checked -eq $true)
     {
        New-Item c:\users\$env:USERNAME\documents\Json -itemtype file -name file.json -value "Hello2" ;$objForm.close()
     }

     elseif ($objBootCheckbox.Checked -eq $true)
     {
        New-Item c:\users\$env:USERNAME\documents\Json -itemtype file -name file.json -value "Hello3" ;$objForm.close()
     }
 })

Upvotes: 1

Related Questions