2016-08-31 149 views
0

我有阻止某些PowerShell腳本:如何優化此代碼?

$checkBox_1.Add_CheckStateChanged({ 
    if($checkBox_1.Checked -or 
     $checkBox_2.Checked -or 
     $checkBox_3.Checked -or 
     $checkBox_4.Checked -or 
     $checkBox_5.Checked -or 
     $checkBox_6.Checked -or 
     $checkBox_7.Checked -or 
     $checkBox_8.Checked -or 
     $checkBox_9.Checked -or 
     $checkBox_10.Checked -or 
     $checkBox_11.Checked -or 
     $checkBox_12.Checked -or 
     $checkBox_13.Checked -or 
     $checkBox_14.Checked) { 
     $okButton.Enabled = $True 
    } 
    else { 
     $okButton.Enabled = $False 
    } 
}) 
$checkBox_2.Add_CheckStateChanged({ 
    if($checkBox_1.Checked -or 
     $checkBox_2.Checked -or 
     $checkBox_3.Checked -or 
     $checkBox_4.Checked -or 
     $checkBox_5.Checked -or 
     $checkBox_6.Checked -or 
     $checkBox_7.Checked -or 
     $checkBox_8.Checked -or 
     $checkBox_9.Checked -or 
     $checkBox_10.Checked -or 
     $checkBox_11.Checked -or 
     $checkBox_12.Checked -or 
     $checkBox_13.Checked -or 
     $checkBox_14.Checked) { 
     $okButton.Enabled = $True 
    } 
    else { 
     $okButton.Enabled = $False 
    } 
}) 

和另一個12相似的塊。

是否以更短,更好的方式編寫此塊?

+0

這可能是對HTTP更合適://代碼審查.stackexchange.com /。雖然我不確定。 – byxor

回答

0

讓所有複選框的數組只有一次:

$checkboxes = Get-Variable checkBox_* 
$checkboxes | ForEach { 
    $_.Value.Add_CheckStateChanged({ 
     $okButton.Enabled = $True -in ($checkboxes | ForEach { $_.Value.Checked }) 
    }) 
} 

在PS3.0 +內部檢查可以簡化:

 $okButton.Enabled = $True -in $checkboxes.Value.Checked