如果不在If-elseif语句中工作

时间:2016-12-04 14:14:32

标签: forms powershell if-statement checkbox conditional-statements

我正在编写一个代码,要求用户标记他想要的某些文件,然后创建一个文件并相应地更改它,现在只是写了一个hello。

问题是它只适用于if部分,而不适用于else if。我无法在网上找到答案。

这是我的代码:

 [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()

2 个答案:

答案 0 :(得分:1)

你在这一行中有一个花括号:

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

所以将点击处理程序更改为:

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

答案 1 :(得分:0)

现在使用 elseif 工作正常。我做了一些改进,如果json文件夹已经存在,那么它就是抛出错误。所以我之前检查如果文件夹已经存在,那么不要创建或覆盖。使用相同的文件夹并在其下创建Json文件。如果文件夹不存在则只创建它。

[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()