Benutzer mit den meisten Antworten
Dynamische Checkbox(en) erzeugen

Frage
-
Hallo,
ich möchte Checkboxen dynamisch generieren.
Habe ein paar Beispiele gefunden und getestet. Die folgende Lösung gefällt mir eigentlich ganz
gut und damit könnte ich arbeiten:
function GenerateForm { param( [string[]]$CheckBoxLabels ) # Rest of code goes here ... }
# Keep track of number of checkboxes $CheckBoxCounter = 1 # When we create a new textbox, we add it to an array for easy reference later $CheckBoxes = foreach($Label in $CheckBoxLabels) { $CheckBox = New-Object System.Windows.Forms.CheckBox $CheckBox.UseVisualStyleBackColor = $True $System_Drawing_Size = New-Object System.Drawing.Size $System_Drawing_Size.Width = 104 $System_Drawing_Size.Height = 24 $CheckBox.Size = $System_Drawing_Size $CheckBox.TabIndex = 2 # Assign text based on the input $CheckBox.Text = $Label $System_Drawing_Point = New-Object System.Drawing.Point $System_Drawing_Point.X = 27 # Make sure to vertically space them dynamically, counter comes in handy $System_Drawing_Point.Y = 13 + (($CheckBoxCounter - 1) * 31) $CheckBox.Location = $System_Drawing_Point $CheckBox.DataBindings.DefaultDataSourceUpdateMode = 0 # Give it a unique name based on our counter $CheckBox.Name = "CheckBox$CheckBoxCounter" # Add it to the form $form1.Controls.Add($CheckBox) # return object ref to array $CheckBox # increment our counter $CheckBoxCounter++ }
$handler_button1_Click= { $listBox1.Items.Clear(); # Keep track of whether something has been added to the list $ContentPresent = $false # Iterate over the checkboxes, one by one foreach($CheckBox in $CheckBoxes){ if($CheckBox.Checked){ $listBox1.Items.Add("{0} (with value ""{1}"") has been checked" -f ($CheckBox.Name,$CheckBox.Text)) $ContentPresent = $True } } # If something was already added to the list, no need to show default message if (-not $ContentPresent) { $listBox1.Items.Add("No CheckBox selected....") }
Ich habe das Ganze auf meine Bedürfnisse angepasst und bin soweit zufrieden damit.
Allerdings verstehe ich irgendwie das "Button click handling" hier nicht. In dem Beispiel hier werden die Ergebnisse
der gecheckten Checkboxen an "$listBox1" übergeben. Wenn ich hier in der foreach-Schleife $Checkbox abfrage, erhalte
ich den CheckState der eben auf 0 oder 1 gesetzt ist. Wie kann ich hier die Werte für CheckBoxLabels wieder abfragen,
die ich mit GenerateForm -CheckBoxLabels Hund,Katze,Maus übergeben habe, um diese wieder in einer Variable zu
speichern und um zu wissen, was nun letztendlich ausgewählt wurde? In dem Beispiel geschieht das wohl über
Items.Add. Statt der foreach-Schleife wäre mir eine Abfrage wie if (Checkbox1.checked) lieber. Habe aber leider gerade
so keine Idee, wie ich es lösen kann. Wäre jemand bitte so nett, mich da mal gerade mit Ideen, Tipps und Vorschlägen
zu unterstützen? Bin auch für komplett andere Ansätze offen, wie man dynamische Checkboxen erstellen kann.
Das hier aufgeführte Beispiel war für mich bisher nur weitestgehens am verständlichsten.
Vielen Dank.
Gruß
Christian
Antworten
-
Hallo Christian,
das hast du doch schon...
in der for...each Schleiffe werden alle deine Checkboxen der Reihe nach abgearbeitet...
das if($Checkbox.checked) {} wird durchlaufen wenn die Checkbox gesetzt ist. du kannst das aber auch weglassen, wenn du alle Checkboxen auswerten willst. mit $Checkbox.Text bekommst du den Bezeichner der Textbox...
Hoffe, das bringt dich etwas weiter
Liebe Grüße
Martin
- Als Antwort vorgeschlagen Martin Schroedl Mittwoch, 29. Januar 2020 07:06
- Als Antwort markiert Denniver ReiningMVP, Moderator Montag, 17. Februar 2020 13:40
Alle Antworten
-
Hallo Christian,
das hast du doch schon...
in der for...each Schleiffe werden alle deine Checkboxen der Reihe nach abgearbeitet...
das if($Checkbox.checked) {} wird durchlaufen wenn die Checkbox gesetzt ist. du kannst das aber auch weglassen, wenn du alle Checkboxen auswerten willst. mit $Checkbox.Text bekommst du den Bezeichner der Textbox...
Hoffe, das bringt dich etwas weiter
Liebe Grüße
Martin
- Als Antwort vorgeschlagen Martin Schroedl Mittwoch, 29. Januar 2020 07:06
- Als Antwort markiert Denniver ReiningMVP, Moderator Montag, 17. Februar 2020 13:40