Powershell Drop Down Menü erstellen
Guten Morgen,
ich möchte mir mit Windows Forms gerne ein Powershell Drop Down Menü bauen.
Das schaut bei mit im Versucht so aus:
Ansicht funktioniert die Funktion so auch recht gut.
Wenn ich im ersten Dop Down Feld etwas auswähle, dass dann ein Befehl verarbeitet wird und die Ausgabe dann im nächsten Drop Down Feld steht, welches erst erscheint, wenn im ersten Feld etwas ausgewählt wurde.
Leider ist es aber so, dass der Wert, welchen ich im 2. Dropdown Feld auswähle irgendwie nicht übernommen wird. Die Variable $objComboboxpostfach.SelectedItem ist einfach leer.
Ich verstehe nicht warum das so ist.
Hat da jemand von Euch einen Tipp für mich?
Vielen Dank
ich möchte mir mit Windows Forms gerne ein Powershell Drop Down Menü bauen.
Das schaut bei mit im Versucht so aus:
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(28,60)
$objLabel.Size = New-Object System.Drawing.Size(1000,20)
$objLabel.Text = "Bitte Benutzernamen wählen:"
$objForm.Controls.Add($objLabel)
$objCombobox = New-Object System.Windows.Forms.Combobox
$objCombobox.Location = New-Object System.Drawing.Size(30,80)
$objCombobox.Size = New-Object System.Drawing.Size(200,20)
$objCombobox.Height = 70
$objForm.Controls.Add($objCombobox)
$objForm.Topmost = $True
$objForm.Add_Shown({$objForm.Activate()})
$objCombobox.Items.AddRange($user) #User werden aus der Variable geladen und angezeigt
$objCombobox.SelectedItem #ausgewählter Username wird übernommen
$objCombobox.Add_SelectedIndexChanged({
$postfachordner = Get-MailboxFolder -Identity $objCombobox.SelectedItem -Recurse
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(28,120)
$objLabel.Size = New-Object System.Drawing.Size(1000,20)
$objLabel.Text = "Postfachordner wählen:"
$objForm.Controls.Add($objLabel)
$objComboboxpostfach = New-Object System.Windows.Forms.Combobox
$objComboboxpostfach.Location = New-Object System.Drawing.Size(30,140)
$objComboboxpostfach.Size = New-Object System.Drawing.Size(200,20)
$objComboboxpostfach.Height = 70
$objForm.Controls.Add($objComboboxpostfach)
$objForm.Topmost = $True
$objForm.Add_Shown({$objForm.Activate()})
$objComboboxpostfach.Items.AddRange($postfachordner) #User werden aus der Variable geladen und angezeigt
$objComboboxpostfach.SelectedItem #ausgewählter Username wird übernommen
})
Ansicht funktioniert die Funktion so auch recht gut.
Wenn ich im ersten Dop Down Feld etwas auswähle, dass dann ein Befehl verarbeitet wird und die Ausgabe dann im nächsten Drop Down Feld steht, welches erst erscheint, wenn im ersten Feld etwas ausgewählt wurde.
Leider ist es aber so, dass der Wert, welchen ich im 2. Dropdown Feld auswähle irgendwie nicht übernommen wird. Die Variable $objComboboxpostfach.SelectedItem ist einfach leer.
Ich verstehe nicht warum das so ist.
Hat da jemand von Euch einen Tipp für mich?
Vielen Dank
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 375749
Url: https://administrator.de/contentid/375749
Ausgedruckt am: 17.11.2024 um 01:11 Uhr
11 Kommentare
Neuester Kommentar
Mach bitte erst mal deine zwei anderen Fragen dicht ... In der man dir schon Lösungen angeboten hat.
Die Variable $objComboboxpostfach.SelectedItem ist einfach leer.
Erstens weil zu dem Zeitpunkt nichts ausgewählt ist, und zweitens du mein Kommentar in deinem letzten Beitrag nicht gelesen hast!Zitat von @blackhawk17:
Hallo,
vielen Dank für deinen Beitrag.
Das eine hat aber hier nichts mit dem anderen zu tun.
Eben doch!! Das versuche ich dir ja klar zu machen.Hallo,
vielen Dank für deinen Beitrag.
Das eine hat aber hier nichts mit dem anderen zu tun.
Die Werte werden ja mit $postfachordner = Get-MailboxFolder -Identity $objCombobox.SelectedItem -Recurse sauber ausgegeben.
Das meinst du, aber das was du dort als Ergebnis bekommst sind MailboxFolder -Objekte keine Strings, deswegen bekommst du als Ergebnis ein Objekt und keinen StringNur was ich nicht verstehe ist, wenn du sagst, dass da bei der Auswahl nichts drin ist wie man den Wert dann übergeben bekommt.
Das steht in deinem letzten Beitrag in meinem Kommentar warum und wieso. Extrahiere die reine Eigenschaft "Folderpath", bei dir also den Pfad und dann bekommst du bei SelectedItem auch den String und nicht das Objekt.Außerdem ist zum Zeitpunkt in Zeile 38 direkt nach dem Hinzufügen der Einträge kein Eintrag ausgewählt, .SelectedItem also NULL.
Wie bekomme ich den Wert denn da vernünftig übergeben?
Genau wie beim ersten DD sobald der User die Auswahl im DD tätigt im Changed Event.
Hast du aber nicht, du hast nur das erste Drop-down mit dem Change Event versehen nicht das zweite und das ist ja das von welchem du ja gerade den Wert auslesen möchtest. Wenn der User eben noch nichts ausgewählt hat gibt es auch nichts anzuzeigen!
Hier ein Beispiel mit festen Daten, kannst du ja dann durch die echten dynamischen ersetzen:
Hier ein Beispiel mit festen Daten, kannst du ja dann durch die echten dynamischen ersetzen:
function GenerateForm {
#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
#endregion
#region Generated Form Objects
$form1 = New-Object System.Windows.Forms.Form
$label2 = New-Object System.Windows.Forms.Label
$comboBox2 = New-Object System.Windows.Forms.ComboBox
$label1 = New-Object System.Windows.Forms.Label
$comboBox1 = New-Object System.Windows.Forms.ComboBox
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#endregion Generated Form Objects
$handler_form1_Load=
{
$comboBox1.Items.AddRange(@('Max Mustermann','Susanne Musterfrau'))
}
$handler_comboBox1_SelectedIndexChanged=
{
if($comboBox1.SelectedIndex -ne -1){
$comboBox2.Enabled = $true
switch($comboBox1.SelectedItem){
'Max Mustermann' {
$comboBox2.Items.Clear()
$comboBox2.Items.AddRange(@("test1","test2","test3"))
}
'Susanne Musterfrau' {
$comboBox2.Items.Clear()
$comboBox2.Items.AddRange(@("test4","test5","test6"))
}
}
}else{
$comboBox2.Enabled = $false
$comboBox2.SelectedIndex = -1
}
}
$handler_comboBox2_SelectedIndexChanged=
{
if($comboBox2.SelectedIndex -ne -1){
[System.Windows.Forms.MessageBox]::Show($comboBox2.SelectedItem)
}
}
$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
$form1.WindowState = $InitialFormWindowState
}
#----------------------------------------------
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 82
$System_Drawing_Size.Width = 238
$form1.ClientSize = $System_Drawing_Size
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$form1.FormBorderStyle = 3
$form1.Name = "form1"
$form1.Text = "Dropdown Test"
$form1.add_Load($handler_form1_Load)
$label2.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 42
$label2.Location = $System_Drawing_Point
$label2.Name = "label2"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 55
$label2.Size = $System_Drawing_Size
$label2.TabIndex = 3
$label2.Text = "Second"
$form1.Controls.Add($label2)
$comboBox2.DataBindings.DefaultDataSourceUpdateMode = 0
$comboBox2.Enabled = $False
$comboBox2.FormattingEnabled = $True
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 73
$System_Drawing_Point.Y = 39
$comboBox2.Location = $System_Drawing_Point
$comboBox2.Name = "comboBox2"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 21
$System_Drawing_Size.Width = 121
$comboBox2.Size = $System_Drawing_Size
$comboBox2.TabIndex = 2
$comboBox2.DropDownStyle = 2
$comboBox2.add_SelectedIndexChanged($handler_comboBox2_SelectedIndexChanged)
$form1.Controls.Add($comboBox2)
$label1.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 15
$label1.Location = $System_Drawing_Point
$label1.Name = "label1"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 42
$label1.Size = $System_Drawing_Size
$label1.TabIndex = 1
$label1.Text = "First"
$form1.Controls.Add($label1)
$comboBox1.DataBindings.DefaultDataSourceUpdateMode = 0
$comboBox1.FormattingEnabled = $True
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 75
$System_Drawing_Point.Y = 12
$comboBox1.Location = $System_Drawing_Point
$comboBox1.Name = "comboBox1"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 21
$System_Drawing_Size.Width = 121
$comboBox1.Size = $System_Drawing_Size
$comboBox1.TabIndex = 0
$comboBox1.DropDownStyle = 2
$comboBox1.add_SelectedIndexChanged($handler_comboBox1_SelectedIndexChanged)
$form1.Controls.Add($comboBox1)
#Save the initial state of the form
$InitialFormWindowState = $form1.WindowState
#Init the OnLoad event to correct the initial state of the form
$form1.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$form1.ShowDialog()| Out-Null
} #End Function
#Call the Function
GenerateForm
Habe ich dir oben schon x mal geschrieben! Weil zu diesem Zeitpunkt keine Auswahl existiert.
Außerdem solltest du dich dringend mit folgendem Artikel beschäftigen about_Scopes - TechNet - Microsoft
Dann arbeite dich noch etwas weiter ins Thema ein, ein Meister fällt nicht mal eben vom Himmel.
Außerdem solltest du dich dringend mit folgendem Artikel beschäftigen about_Scopes - TechNet - Microsoft
Dann arbeite dich noch etwas weiter ins Thema ein, ein Meister fällt nicht mal eben vom Himmel.