StefanS1982 0 Geschrieben 18. Januar 2022 Melden Teilen Geschrieben 18. Januar 2022 Hallo zusammen, ich arbeite mich gerade in PS ein und bin dabei ein kleines Script zu schreiben welches dem User mittels zwei Radiobuttons Auswahlmöglichkeiten bietet. Es soll folgendes Verhalten zeigen: Form wird geladen und nur die Radiobuttons sind zu sehen. Bei Auswahl von Option 1 erscheint rechts der GroupBox eine ListBox aus der dann ein Eintrag ausgewählt werden kann. Bei Auswahl von Option 2 erscheint eine andere ListBox aus der ein Eintrag ausgewählt werden kann. Ich möchte jedoch das immer nur die ListBox zu sehen ist, welche zu dem ausgewählten RadioButton gehört. Das Einblenden der ListBoxen funktioniert, aber wenn die einmal mittels .Add_Click Event eingeblendet sind, bekomme ich sie nicht mehr ausgeblendet. Hat vielleicht jemand eine Lösung für mein Problem? Ich google mir seit knapp einer Woche nen Wolf und komm nicht weiter. Daher dacht ich mich mir stell mal hier die Frage. Vermutlich ist es ziemlich einfach und ich sehe den Wald vor lauter Bäumen nicht. Grüße Stefan Hier mal der Code: [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") $Abfrage=New-Object System.Windows.Forms.Form $Abfrage.StartPosition="CenterScreen" $Abfrage.Size=New-Object System.Drawing.Size(1000,600) $Abfrage.Text="Allgemeine Infos" $Abfrage.Font=New-Object System.Drawing.Font("Microsoft Sans Serif",12) $Group=New-Object System.Windows.Forms.GroupBox $Group.Name="Group" $Group.Text="Gruppe" $Group.Location=New-Object System.Drawing.Point(10,40) $Group.Size=New-Object System.Drawing.Size(220,130) $Abfrage.Controls.Add($Group) $Option1=New-Object System.Windows.Forms.RadioButton $Option2=New-Object System.Windows.Forms.RadioButton $Option1.Name="Option1" $Option2.Name="Option2" $Option1.Text="Option1" $Option2.Text="Option2" $Option1.Location=New-Object System.Drawing.Point(10,20) $Option2.Location=New-Object System.Drawing.Point(10,50) $Option1.Size=$Option2.Size=New-Object System.Drawing.Size(180,40) $Option1, $Option2 | ForEach-Object {$Group.Controls.Add($_)} $Option1.Add_Click({ $Auswahlfeld2=New-Object System.Windows.Forms.Listbox $Auswahlfeld2.SelectionMode="One" $Auswahlfeld2.Height=150 $Auswahlfeld2.Width=150 $Auswahlfeld2.Location =New-Object System.Drawing.Point(500,50) $Abfrage.Controls.Add($Auswahlfeld2) $Abfrage.Controls.Remove($Auswahlfeld) }) $Option2.Add_Click({ $Auswahlfeld=New-Object System.Windows.Forms.Listbox $Auswahlfeld.SelectionMode="One" $Auswahlfeld.Height=150 $Auswahlfeld.Width=150 $Auswahlfeld.Location =New-Object System.Drawing.Point(300,50) $Abfrage.Controls.Add($Auswahlfeld) $Abfrage.Controls.Remove($Auswahlfeld2) }) [void]$Abfrage.ShowDialog() Zitieren Link zu diesem Kommentar
Beste Lösung NilsK 2.940 Geschrieben 18. Januar 2022 Beste Lösung Melden Teilen Geschrieben 18. Januar 2022 Moin, vorweg: GUIs sind nicht die Stärke der PowerShell, eigentlich hat PowerShell einen Automatisierungsfokus. Ohne die Technik, die du da einsetzt, näher zu kennen und ohne lange analysiert zu haben, würde ich vermuten, dass du hier in eine Scope-Falle gelaufen bist. Deine Objekte $Auswahlfeld und $Auswahlfeld2 sehen mir so aus, dass sie nur im Scope des jeweiligen Blocks existieren. Der Block $Option1 kennt also nur das $Auswahlfeld2, aber nicht das $Auswahlfeld, entsprechend im anderen Block. Hab's jetzt mal geprüft, das dürfte so sein. Diese Ergänzung des Codes illustriert das: $Option1.Add_Click({ $Auswahlfeld2=New-Object System.Windows.Forms.Listbox $Auswahlfeld2.SelectionMode="One" $Auswahlfeld2.Height=150 $Auswahlfeld2.Width=150 $Auswahlfeld2.Location =New-Object System.Drawing.Point(500,50) Write-Host 'Option1' Write-Host "Auswahlfeld2: $Auswahlfeld2" Write-Host "Auswahlfeld: $Auswahlfeld" $Abfrage.Controls.Add($Auswahlfeld2) $Abfrage.Controls.Remove($Auswahlfeld) }) $Option2.Add_Click({ $Auswahlfeld=New-Object System.Windows.Forms.Listbox $Auswahlfeld.SelectionMode="One" $Auswahlfeld.Height=150 $Auswahlfeld.Width=150 $Auswahlfeld.Location =New-Object System.Drawing.Point(300,50) Write-Host 'Option2' Write-Host "Auswahlfeld2: $Auswahlfeld2" Write-Host "Auswahlfeld: $Auswahlfeld" $Abfrage.Controls.Add($Auswahlfeld) $Abfrage.Controls.Remove($Auswahlfeld2) }) Gruß, Nils 1 Zitieren Link zu diesem Kommentar
StefanS1982 0 Geschrieben 18. Januar 2022 Autor Melden Teilen Geschrieben 18. Januar 2022 (bearbeitet) Danke! Das war die Lösung! Ich weiß um PS und GUI, aber im angestrebten Nutzungsfall ist PS der kleinste gemeinsame Nenner und ich brauche nur 2 Formulare auf denen insgesamt keine 10 Optionen verteilt sind. Daher habe ich mich für PS entschieden. Die Lösung ist es die Objekte $Auswahlfeld und $Auswahlfeld2 auf global zu setzen. Ich weiß nicht ob es da eine "bessere" oder andere Lösung gibt, aber für mein Problem funktioniert sie :) $Option1.Add_Click({ $global:Auswahlfeld2=New-Object System.Windows.Forms.Listbox $Auswahlfeld2.SelectionMode="One" $Auswahlfeld2.Height=150 $Auswahlfeld2.Width=150 $Auswahlfeld2.Location =New-Object System.Drawing.Point(500,50) Write-Host 'Option1' Write-Host "Auswahlfeld2: $Auswahlfeld2" Write-Host "Auswahlfeld: $Auswahlfeld" $Abfrage.Controls.Add($Auswahlfeld2) $Abfrage.Controls.Remove($Auswahlfeld) }) $Option2.Add_Click({ $global:Auswahlfeld=New-Object System.Windows.Forms.Listbox $Auswahlfeld.SelectionMode="One" $Auswahlfeld.Height=150 $Auswahlfeld.Width=150 $Auswahlfeld.Location =New-Object System.Drawing.Point(300,50) Write-Host 'Option2' Write-Host "Auswahlfeld2: $Auswahlfeld2" Write-Host "Auswahlfeld: $Auswahlfeld" $Abfrage.Controls.Add($Auswahlfeld) $Abfrage.Controls.Remove($Auswahlfeld2) }) bearbeitet 18. Januar 2022 von StefanS1982 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.