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:
functionGenerateForm{
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-ObjectSystem.Windows.Forms.CheckBox $CheckBox.UseVisualStyleBackColor= $True $System_Drawing_Size =New-ObjectSystem.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-ObjectSystem.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 messageif(-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