none
Properties eines dynamisch erzeugten Objekts ändern RRS feed

  • Frage

  • Hallo zusammen,

    ich will dynamisch eine Anzahl von Checkboxen erzeugen. In meinem Fall für Jeden Wert in einem Array sollen 2 Checkboxen erzeugt werden.

    Dafür habe ich folgende Schleife:

    foreach ($Value in $Values) 
                        {for ($i= 1; $i -le 2; $i++)
                        {
                         New-Variable -Name ("CheckBox"+$Value+$i) -Value (New-Object system.Windows.Forms.CheckBox)
    
    #Versuche, die Properties zu ändern
    #Variante 1                 
       $dynvar =  ("CheckBox"+$Mandant+$i)
       $dynvar.Text          ="Opt"+$i
    #Variante 2
      ("CheckBox"+$Mandant+$i).Text      ="Opt"+$i
                        }
                       } 

    Nun schaffe ich es nicht, das Objekt über seinen dynamisch erzeugten Namen korrekt anzusprechen, denn in 

    ("CheckBox"+$Value+$i)

    steht nur der Name des Objekts.

    Jetzt ist meine Frage, wie ich das Objekt korrekt anspreche, um die Properties anzupassen.

    Schon mal danke.

    Gruß

    Montag, 8. Juli 2019 09:01

Antworten

  • Was du da machst ist, entschuldige bitte, Schrott.
    Forms-Objekte lassen sich nicht in CSV exportieren!

    Stichwort Hashtable/Dictionary:

    $Checks = @()
    $varname = "CheckBox" + $Value + $i
    $Checks[$varname]  = new-object system.Windows.Forms.CheckBox

    Danach kannst du die Checkboxen via Namen über das Dictionary ansprechen.

    • Als Antwort markiert marc-sysadmn Dienstag, 9. Juli 2019 10:58
    Montag, 8. Juli 2019 12:17
  • Entschulding, Hashtable wird per

    $objdict = @{}

    initialisert, ansonsten hat man nur ein Objekt-Array;-).

    • Als Antwort markiert marc-sysadmn Dienstag, 9. Juli 2019 10:58
    Montag, 8. Juli 2019 16:23

Alle Antworten

  • Du musst dir die erstellten Objekte in einem Array/Dictionary mit Name+Objekt merken.
    Dann kannst du das Objekt per Name aus dem Dictionary auslesen und dessen Eigenschaften und Methoden verwenden.

    So verlierst du im Moment das erstellte Objekt.


    • Bearbeitet bfuerchau Montag, 8. Juli 2019 09:40
    Montag, 8. Juli 2019 09:39
  • Scheinbar mache ich dabei etwas falsch oder habe falsch verstanden, was du meinst:

    Ich habe folgendes versucht:

    $dynvar = New-Variable -Name ("CheckBox"+$Value+$i) -Value (New-Object system.Windows.Forms.CheckBox)
    $dynvar = @((New-Variable -Name ("CheckBox"+$Value+$i) -Value (New-Object system.Windows.Forms.CheckBox))

    Ich habe auch mal testweise versucht, das Objekt in eine CSV zu exportierten:

    $varname = ("CheckBox"+$Value+$i)
                        New-Variable -Name $varname -Value (New-Object system.Windows.Forms.CheckBox) | Export-Csv -Path "X:\XXXXX\$varname"

    Doch jedes mal ist das Array oder die csv leer.

    Montag, 8. Juli 2019 12:02
  • Was du da machst ist, entschuldige bitte, Schrott.
    Forms-Objekte lassen sich nicht in CSV exportieren!

    Stichwort Hashtable/Dictionary:

    $Checks = @()
    $varname = "CheckBox" + $Value + $i
    $Checks[$varname]  = new-object system.Windows.Forms.CheckBox

    Danach kannst du die Checkboxen via Namen über das Dictionary ansprechen.

    • Als Antwort markiert marc-sysadmn Dienstag, 9. Juli 2019 10:58
    Montag, 8. Juli 2019 12:17
  • Danke für die Hilfe.

    bzgl. CSV: wie du an meinen Fragen siehst, habe ich noch wenig Erfahrung mit Forms, es war nur ein Versuch.

    Wenn ich deinen Ansatz probiere, bekomme ich folgende Fehlermeldung:

    Der Wert "CheckBoxWert1" kann nicht in den Typ "System.Int32" konvertiert werden. Fehler: "Die Eingabezeichenfolge hat das falsche Format."

    $objdict[$varname] = New-Object system.Windows.Forms.Chec ...

    Auch wenn ich einen feststehenden String verwende, kann ich das New-Object nicht übergeben.

    Vll. hast du noch eine Idee?

    Montag, 8. Juli 2019 13:46
  • Entschulding, Hashtable wird per

    $objdict = @{}

    initialisert, ansonsten hat man nur ein Objekt-Array;-).

    • Als Antwort markiert marc-sysadmn Dienstag, 9. Juli 2019 10:58
    Montag, 8. Juli 2019 16:23
  • So klappts. Vielen Dank!

    Anbei noch meine funktionierende Schleife:

    $objdict=@{}
    foreach ($Value in $Values) 
                        {for ($i= 1; $i -le 5; $i++)
                        {
                                       
                        $varname = ("CheckBox"+$Value+$i)
                        $objdict[$varname] = New-Object system.Windows.Forms.CheckBox
                        $objdict[$varname].text = "Opt"+$i
                        $objdict[$varname].AutoSize      =$True
                        $objdict[$varname].Font           ='Microsoft Sans Serif,10'
                        $Form.controls.AddRange(@($objdict[$varname]))
                        }
                        }

    Gruß

    Dienstag, 9. Juli 2019 11:01
  • Noch etwas schneller und logischer ginge es so:

    $varname = "CheckBox"+$Value+$i $checkbox = New-Object system.Windows.Forms.CheckBox $checkbox.text = "Opt"+$i $checkbox.AutoSize = $True $checkbox.Font = 'Microsoft Sans Serif,10'
    $objdict[$varname] = $checkbox



    Dienstag, 9. Juli 2019 13:13