Hallo Forum,
I habe ein Problem, bei dem ich hoffe, dass Ihr mir helfen könnt:
Ich habe ein Fenster per Powershell mit dem Namen "$objForm" gebaut
$objForm = New-Object System.Windows.Forms.Form
in dieses Fensterhabe ich (unter Anderem) einen Knopf (mit namen $btn5) eingebaut.
Wird dieser Knopf gedrückt, soll eine Funktion (mit dem namen done) aufgerufen werden und eine Variable ($WindowName) übergeben werden. Diese Funktion soll einen "Done-Knopf" in das geöffnete Fenster-Formular einbblenden. (Das Ganze funktioniert einwandfrei, solange ich den Code nicht als Funktion auslagere)
In dem "Hauptfenster-Formular" habe ich 'objForm' an die Variable $WindowName übergeben (das ist ja der Name des Fenster-Formulares)
$WindowName ='objForm'
um die Funktion dann aufzurufen, wird beim Betätigen des entsprechnden Knopfes folgendes ausgeführt (also Aufruf der Funktion "done" mit Übergabe der Varibale "$WindowName")
$btn5.add_Click{(done $WindowName)}
Meine Funktion sieht so aus :
function done
{
param ($WindowName)
$done = New-Object System.Windows.Forms.Button
$doneFont = New-Object System.Drawing.Font("Calibri",18,[System.Drawing.FontStyle]::Bold)
$done.Font = $doneFont
$done.Location = New-Object System.Drawing.Size(320,200)
$done.Size = New-Object System.Drawing.Size(150,50)
$done.ForeColor="red"
$done.Text = "DONE!"
write-host 'Hello'
write-host $WindowName
$WindowName
$done.Add_Click({
$WindowName.Controls.Remove($done),
$WindowName.Controls.refresh()
})
$WindowName.Controls.Add($done)
}
Starte ich das Programm jetzt (Drücke also den Knopf 5 im Hauptfenster-Formular), bekomme ich foilgende Meldung:
Hello
objForm
you cannot call a method on a null-valued expression.
At C:\temp\done.ps1:22 char:1
+WindowName.Controls.Add($done)
+
+CategoryInfo : InvalidOperation: (:) [], RuntimeException
+Fully QualifiedErrorID: InvokeMethodOnNull
Das 'Hello' kommt vom 1. wrtite-Host Befehl (Da wollte ich nur schauen, ob write-Host überhaupt funktioniert)
Das 'objForm' kommt vom 2. write-Host Befehl (Super! Die variable '$WindowName' wird also übergeben!!)
Aber warum wird der Inhalt Variable 'WindowName' nicht auch beim nächsten befehl angewendet?
Das $WindowName.Controls.Add($done) sollte eigentlich umgewandelt werden in ein ' objForm.Controls.Add($done)' - dann wäre alles super und es würde funktionieren. Aber das bekomme ich nicht hin?!
Vielen Dank für jede Hilfe
newbi