none
Dynamische Checkbox(en) erzeugen RRS feed

  • 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


    Montag, 27. Januar 2020 22:42

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

    Dienstag, 28. Januar 2020 15:33

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

    Dienstag, 28. Januar 2020 15:33
  • Hallo Martin,

    danke für Deine Antwort.

    Ich habe es am nächsten Tag auch gemerkt. Manchmal sollte man einfach ins Bett gehen ;-)

    Gruß

    Christian

    Mittwoch, 19. Februar 2020 19:47