Powershell - Nur TRUE für eine Checkbox erlauben
Hallo zusammen,
ich habe in Powershell 10 Checkboxen. Ich möchte nur erlauben, dass eine von diesen 10 CheckBoxen markiert werden kann.
Nun könnte ich, wenn ich nur 2 Checkboxen hätte, recht einfach mit folgendem Code verhindern, dass die 2. CheckBox gleichzeitig $True ist
Wie mache ich es denn am geschicktesten mit meinen 10 Checkboxen? Es gibt doch sicherlich einen eleganteren Weg, als 10 If-Abfragen zu erstellen, und in jeder Abfrage die anderen 9 Checkboxen auf Enabled = $False zu setzen. Aber irgendwie wüsste ich gerade nicht WIE.
Habt Ihr eine Anregung für mich?
Danke Euch
Holger
ich habe in Powershell 10 Checkboxen. Ich möchte nur erlauben, dass eine von diesen 10 CheckBoxen markiert werden kann.
Nun könnte ich, wenn ich nur 2 Checkboxen hätte, recht einfach mit folgendem Code verhindern, dass die 2. CheckBox gleichzeitig $True ist
$checkbox1.Add_CheckStateChanged({
if ($checkBox1.Checked){ $checkbox2.Enabled = $false }
})
Wie mache ich es denn am geschicktesten mit meinen 10 Checkboxen? Es gibt doch sicherlich einen eleganteren Weg, als 10 If-Abfragen zu erstellen, und in jeder Abfrage die anderen 9 Checkboxen auf Enabled = $False zu setzen. Aber irgendwie wüsste ich gerade nicht WIE.
Habt Ihr eine Anregung für mich?
Danke Euch
Holger
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3134362354
Url: https://administrator.de/forum/powershell-nur-true-fuer-eine-checkbox-erlauben-3134362354.html
Ausgedruckt am: 06.03.2025 um 19:03 Uhr
7 Kommentare
Neuester Kommentar
Servus Holger.
Wäre auch meine Wahl ...
2 Beispiel für dich:
Mit Checkboxen geht's aber auch wenn's sein muss
Grüße Uwe
Wäre auch meine Wahl ...
2 Beispiel für dich:
Radio Buttons
function GenerateForm {
Add-Type -A System.Windows.Forms
$form1 = New-Object System.Windows.Forms.Form -P @{
ClientSize = '200,300'
Text = "Radio Buttons"
}
$group = New-Object System.Windows.Forms.GroupBox -P @{
Text = 'MyRadios'
Size = '180,240'
Location = '10,10'
}
$radios = 1..10 | %{
New-Object System.Windows.Forms.RadioButton -P @{
Location = "10,$($_*20)"
Size = '150,20'
Anchor = 'Top,Left,Right'
Text = "Radio $_"
}
}
$group.Controls.AddRange($radios)
$btn = New-Object System.Windows.Forms.Button -P @{
Text = "OK"
Location = '140,260'
Size = '50,30'
add_Click = {
$form1.Close()
}
}
$form1.Controls.AddRange(@($group,$btn))
[void]$form1.ShowDialog()
$radios | ?{$_.Checked} | select -Expand Text
}
GenerateForm
Mit Checkboxen geht's aber auch wenn's sein muss
Checkboxes
function GenerateForm {
Add-Type -A System.Windows.Forms
$form1 = New-Object System.Windows.Forms.Form -P @{
ClientSize = '200,300'
Text = "Radio Buttons"
}
$group = New-Object System.Windows.Forms.GroupBox -P @{
Text = 'My checkboxes'
Size = '180,240'
Location = '10,10'
}
$boxes = 1..10 | %{
New-Object System.Windows.Forms.CheckBox -P @{
Location = "10,$($_*20)"
Size = '150,20'
Anchor = 'Top,Left,Right'
Text = "Checkbox $_"
add_CheckedChanged = {
$checked = $boxes | ?{$_.Checked}
if ($checked.Count -gt 1){
$checked | %{$_.Checked = $false}
$this.Checked = $true
}
}
}
}
$group.Controls.AddRange($boxes)
$btn = New-Object System.Windows.Forms.Button -P @{
Text = "OK"
Location = '140,260'
Size = '50,30'
add_Click = {
$form1.Close()
}
}
$form1.Controls.AddRange(@($group,$btn))
[void]$form1.ShowDialog()
$boxes | ?{$_.Checked} | select -Expand Text
}
GenerateForm
Moin,
Die Pipeline-Variable, die den Text enthält ist immer $_
Gruß Thomas
Zitat von @newbi2009:
Ich scheitere schon alleine daran, jeder Box einen anderen Namen zu geben (nicht 1-10, sondern aaa, abc, fgb, igh,....)
1..10 erstellt ein Array aus den Zahlen von 1 bis 10, das %-Zeichen ist ein Alias für Foreach-Object - erstellt dann also für jede dieser Zahlen eine Checkbox gemäß dem Code in den geschweiften Klammern.Ich scheitere schon alleine daran, jeder Box einen anderen Namen zu geben (nicht 1-10, sondern aaa, abc, fgb, igh,....)
Könntest Du mir da wohl nochmal auf die Sprünge helfen?
Einfach den Array aus den Zahlen 1..10 durch einen Array deiner Wahl austauschen: $boxes = "aaa", "abc", "fgb", "igh" | %{
...
}
Die Pipeline-Variable, die den Text enthält ist immer $_
Gruß Thomas
Gerne.
Noch zur Info: Die Location-Zeile musst du natürlich ebenfalls anpassen, da @colinardo hier mit dem Wert aus den Array von 1-10 gerechnet hat. Am besten ersetzt du den Wert hier durch eine andere Variable und erhöhst diese dann immer entsprechend für die nächste Checkbox, also z.B.:
Gruß Thomas
Noch zur Info: Die Location-Zeile musst du natürlich ebenfalls anpassen, da @colinardo hier mit dem Wert aus den Array von 1-10 gerechnet hat. Am besten ersetzt du den Wert hier durch eine andere Variable und erhöhst diese dann immer entsprechend für die nächste Checkbox, also z.B.:
$boxes = "aaa", "abc", "fgb", "igh" | %{ $Y=20 }{
New-Object System.Windows.Forms.CheckBox -P @{
Location = "10,$Y"
$Y += 20
...
}
Gruß Thomas