Es geht darum, dass ich für eine Abfrage eine kleine GUI schreiben möchte. In diesem speziellen Fall soll ein Kunde ausgewählt werden (erster Knopfdruck), wodurch eine Funktion aufgerufen wird, welche die GUI verändert. Man soll nun den Kunden auswählen
(hier durch die Zahlen 1 bis 15 repräsentiert) und nachdem man auf dem entsprechenden Button gedrückt hat, soll unter der Combobox der ausgewählte Kunde ausgegeben werden.
Leider kann ich mich drehen und wenden, wie ich will - das $objCombobox.selectedItem bleibt leer.
Als Workaround habe ich das Ganze ohne Functions geschrieben und es funktioniert. Deswegen vermute ich, dass es irgendwas mit der Parameterübergabe zu tun hat. Aber kann/muss man Objekte anderen Funktionen übergeben?
Die umgeschriebene Fassung ist leider sehr unübersichtlich und zudem lässt mich dieses Problem nicht los.
Vielen Dank schon mal, dass du dir das bis hierhin durchgelesen hast. :-)
#################
# Informationen #
#################
# Skriptname: GUI_stoerbericht
# Version: 0.1
# Datum: 15.07.2019
# Autor: german_erd ;-)
#################################
#############
# Preskript #
#############
Add-Type-AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()
#############
# Variablen #
#############
##############
# Funktionen #
##############
functionKundeInKontextUebernehmen{
$outputLabel =New-Object System.Windows.Forms.Label
$outputLabel.AutoSize =$true
$outputLabel.width =300
$outputLabel.height =20
$outputLabel.location =New-Object System.Drawing.Point(100,325)
$outputLabel.text ="Ausgewählter Kunde: " +$objCombobox.SelectedItem
$outputLabel.Font ='Microsoft Sans Serif,10'
$objForm.controls.AddRange(@($outputLabel))
}
functionEinKundeAusgewaehlt {
# GUI
# Button Alle Kunden Ausblenden
$objForm.Controls.remove($AllCustButton)
$objForm.refresh()
# Combobox
$objCombobox =New-Object System.Windows.Forms.ComboBox
$objCombobox.Location =New-Object System.Drawing.Point(100,300)
$objCombobox.Size =New-Object System.Drawing.Size(600,200)
1..15|ForEach-Object {$objCombobox.Items.Add($_)}
# Button
$Button =New-Object System.Windows.Forms.Button
$Button.Location =New-Object System.Drawing.Point(500,325)
$Button.Size =New-Object System.Drawing.Size(200,50)
$Button.Font ="Microsoft Sans Serif,12"
$Button.Text ="Gewählten Kunden übernehmen"
#$button.Visible = $false
$objForm.controls.AddRange(@($objCombobox,$Button))
$Button.add_click({ KundeInKontextUebernehmen })
}
#############
# Basic GUI #
#############
# Objekt Fenster
$objForm =New-Object system.Windows.Forms.Form
$objForm.ClientSize ='800,600'
$objForm.text ="Störberichte Skript"
$objForm.TopMost =$true
$objForm.BackgroundImageLayout =2
$objForm.BackgroundImage = [System.Drawing.Image]::FromFile('C:\Users\xxxxx\Desktop\xxxx.jpg')
$objForm.AcceptButton =$Button
$objForm.Controls.Add($Button)
# Abbrechen-Button#
$CancelButton =New-Object System.Windows.Forms.Button
$CancelButton.Location =New-Object System.Drawing.Size(600,500)
$CancelButton.Size =New-Object System.Drawing.Size(150,50)
$CancelButton.Text ="Abbrechen"
$CancelButton.Name ="Abbrechen"
$CancelButton.DialogResult ="Cancel"
$CancelButton.Add_Click({$objForm.Close()})
# Alle Kunden auswählen#
$AllCustButton =New-Object System.Windows.Forms.Button
$AllCustButton.Location =New-Object System.Drawing.Size(100,100)
$AllCustButton.Size =New-Object System.Drawing.Size(250,150)
$AllCustButton.Text ="Alle Kunden auswählen"
$AllCustButton.Name ="Alle Kunden auswählen"
$AllCustButton.Font ="Microsoft Sans Serif,16"
$AllCustButton.Add_Click({ alleKundenAusgewaehlt })
# Einen Kunden auswählen#
$OneCust =New-Object System.Windows.Forms.Button
$OneCust.Location =New-Object System.Drawing.Size(450,100)
$OneCust.Size =New-Object System.Drawing.Size(250,150)
$OneCust.Text ="Einen Kunden auswählen"
$OneCust.Name ="Einen Kunden auswählen"
$OneCust.Font ="Microsoft Sans Serif,16"
$OneCust.Add_Click({ EinKundeAusgewaehlt })
# Finales Einfügen der einzelnen Objekte
$objForm.controls.AddRange(@($OneCust,$AllCustButton,$CancelButton))
#####Ende Basic GUI#####
# Zum Ausführen des ganzen Spaßes
[void]$objForm.ShowDialog()