несколько флажков в PowerShell GUI - PullRequest
0 голосов
/ 05 августа 2020

У меня есть GUI, на котором выполняются различные задачи. Одна задача, которую я не могу решить, - это как обрабатывать несколько условий флажка и выражение условия в зависимости от того, что отмечено или нет.

Пример кода, как показано ниже

edit: форматирование кода у меня не работает .....

    If ($Checkbox1.Checked)
 {
    Write-Host "Only checkbox 1 is checked"
 }
ElseIf ($Checkbox2.Checked)
 {
    Write-Host "Only checkbox 2 is checked"
 }
ElseIf ($Checkbox3.Checked)
 {
    Write-Host "only checkbox 3 is checked"
 }
Elseif ($Checkbox1.Checked -And $Checkbox2.Checked)
 {
    Write-Host "Both Checkbox1 and Checkbox2 are checked"
 } 
Elseif ($Checkbox2.Checked -And $Checkbox3.Checked)
 {
    Write-Host "Both Checkbox2 and Checkbox3 are checked"
 } 
Elseif ($Checkbox1.Checked -And $Checkbox2.Checked -And $Checkbox3.Checked)
 {
    Write-Host "All are checked!"
 } 
Else
 {
     Write-Host "No checkbox selected"
 }

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Вы имеете в виду что-то вроде этого ...

Clear-Host
[void][system.reflection.assembly]::LoadWithPartialName('System.Drawing')
[void][System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')
        
$objForm = New-Object System.Windows.Forms.Form

$objForm.Text          = 'Test'
$objForm.Size          = New-Object System.Drawing.Size(500,200)
$objForm.StartPosition = 'CenterScreen'

$CheckedListBox              = New-Object System.Windows.Forms.CheckedListBox
$CheckedListBox.Location     = New-Object System.Drawing.Size(20,20)
$CheckedListBox.size         = New-Object System.Drawing.Size(300,100) 
$CheckedListBox.CheckOnClick = $true 
$CheckedListBox.Items.AddRange(1..3)
$CheckedListBox.ClearSelected()

$objForm.Controls.Add($CheckedListBox)

$CheckedListBox.Add_Click({
    For ($i=1;$i -lt $CheckedListBox.Items.count;$i++) 
    {$CheckedListBox}
})

# put form in front of other windows
$objForm.TopMost = $True

# display the form
$DisplayForm     = $objForm.ShowDialog()

ForEach ($CheckedItem in $CheckedListBox.CheckedItems -join ',')
{
    Switch ($CheckedItem)
    {
        1       {"Checkbox $CheckedItem is checked";Break}
        2       {"Checkbox $CheckedItem is checked";Break}
        3       {"Checkbox $CheckedItem is checked";Break}
        {1,2}   {"Checkbox $CheckedItem is checked";Break}
        {1,3}   {"Checkbox $CheckedItem is checked";Break}
        {2,3}   {"Checkbox $CheckedItem is checked";Break}
        {1..3}  {"Checkbox $CheckedItem is checked";Break}
    }
}

Чтобы не усложнять, я не стал явно добавлять кнопки, поэтому просто щелкните то, что вы хотите, чтобы закрыть форму с помощью 'X' чтобы увидеть результаты вашего выбора.

0 голосов
/ 05 августа 2020

Один из способов сделать это - создать числовое c значение (растровое изображение, также известное как «флаги»), где каждый бит представляет собой флажок. Это легко сделать с помощью оператора -shl (ShiftLeft):

[int]$Checkbox1.Checked        --> 0 or 1
[int]$Checkbox2.Checked -shl 1 --> 0 or 2
[int]$Checkbox3.Checked -shl 2 --> 0 or 4

Затем выполните переключение возможных комбинаций этих значений.

# combine the numeric values for the checkboxes
$binValue = [int]$Checkbox1.Checked -bor 
           ([int]$Checkbox2.Checked -shl 1) -bor 
           ([int]$Checkbox3.Checked -shl 2)

# check what value the above returned
switch ($binValue) {
    0 { Write-Host "No checkbox selected"; break }
    1 { Write-Host "Only checkbox 1 is checked"; break }
    2 { Write-Host "Only checkbox 2 is checked"; break }
    3 { Write-Host "Both Checkbox1 and Checkbox2 are checked"; break }
    4 { Write-Host "Only checkbox 3 is checked"; break }
    5 { Write-Host "Both Checkbox1 and Checkbox3 are checked"; break }
    6 { Write-Host "Both Checkbox2 and Checkbox3 are checked"; break }
    7 {  Write-Host "All are checked!" }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...