none
Eingabe über eine GUI mit Gültigkeitsprüfung

    Frage

  • Hallo zusammen,

    bin gerade dabei erste Erfahrungen mit Oberflächen in Powershell zu machen. Das Skript soll neue AD-User anlegen und einzelne Attribute auf die Länge prüfen und nur bei einer bestimmten Anzahl an Zeichen die Eingabe erlauben, aber hauptsächlich keine leeren Eingabefelder erlauben. Dazu habe ich ein Testskript geschrieben bzw. aus dem Hauptskript kopiert (es wurde nicht auf das Aussehen geachtet).

    Jetzt zu meinem 1. Problem, wenn die Voraussetzungen erfüllt ist, dann muss 2-Mal auf den Erstellen Knopf gedrückt werden um das Fenster zu schließen. Egal ob der eingegebene Text gleich die richtige Syntax hat oder erst beim 5. Versuch.

    2. Problem: Auch mit wenn ich den Button Cancel bzw. auf das Kreuz des Fensters drücke muss die Voraussetzung erfüllt sein. Wie kann ich das umgehen?

    3. Problem: Wie kann man angeben, dass das Resultat aus dem einen if das des anderen if nicht überschreibt sondern angehängt wird? (Habe schon label1 = label1 +"neuer Text" versucht aber es hat nicht funktioniert)

    Jetzt noch paar kurze Erklärungen zum Code selbst bzw. was ich mir dabei gedacht habe:

    1. Mit diesem Aufruf in der Schleife soll die Seite aktualisiert neu angezeigt werden

    [void]$fenster.ShowDialog()

    2. Außerdem in der Schleife, die If-Bedingung. Um zu vermeiden, dass die nächste Bedingung diesen falsch setzt und so die vorhergehenden Bedingungen irrelevant werden. 

    If($fehlermodus-ne1){$fehlermodus=0} else{$fehlermodus=1}

    Vielen Dank schon Mal für eure Bemühungen.

    Mit freundlichen Grüßen

    Dominik Hartl

     
    Add-Type -AssemblyName System.Windows.Forms
            Add-Type -AssemblyName System.Drawing
    
                $fenster = New-Object System.Windows.Forms.Form
                $fenster.Text = 'Assistent zum Erstellen eines neuen Benutzers'
                $fenster.Size = New-Object System.Drawing.Size(550,800)
                $fenster.StartPosition = 'CenterScreen'
                $fenster.KeyPreview = $True
                $fenster.Add_KeyDown({If($fehlermodus =0){if ($_.KeyCode -eq „Enter“) {$fenster.DialogResult=“OK“;$fenster.Close()}} })             $fenster.Add_KeyDown({if ($_.KeyCode -eq „Escape“) { $fenster.DialogResult=“Cancel“;$fenster.Close()} })
    
                $label1 = New-Object System.Windows.Forms.Label
                $label1.Location = New-Object System.Drawing.Point(20,520)
                $label1.Size = New-Object System.Drawing.Size(120,30)
                $label1.Text = ''
                $label1.BackColor = "blue"
                $fenster.Controls.Add($label1)
    
                $label4 = New-Object System.Windows.Forms.Label
                $label4.Location = New-Object System.Drawing.Point(20,590)
                $label4.Size = New-Object System.Drawing.Size(120,30)
                $label4.Text = ''
                $label4.BackColor = "blue"
                $fenster.Controls.Add($label4)
    
                $textBox8 = New-Object System.Windows.Forms.TextBox
                $textBox8.Location = New-Object System.Drawing.Point(140,520)
                $textBox8.Size = New-Object System.Drawing.Size(130,30)
                $fenster.Controls.Add($textBox8)
    
                $textBox9 = New-Object System.Windows.Forms.TextBox
                $textBox9.Location = New-Object System.Drawing.Point(140,590)
                $textBox9.Size = New-Object System.Drawing.Size(130,30)
                $fenster.Controls.Add($textBox9)
    
                $labelbsp5 = New-Object System.Windows.Forms.Label
                $labelbsp5.Location = New-Object System.Drawing.Point(280,310)
                $labelbsp5.Size = New-Object System.Drawing.Size(150,30)
                $labelbsp5.Text = ''
                $fenster.Controls.Add($labelbsp5)
    
                #Button Erstellen
                $erstellenButton = New-Object System.Windows.Forms.Button
                $erstellenButton.Location = New-Object System.Drawing.Size(140,690)
                $erstellenButton.Size = New-Object System.Drawing.Size(75,23)
                $erstellenButton.Text = „Erstellen“
                $erstellenButton.DialogResult = "OK"                            
                $fenster.Controls.Add($erstellenButton)
                
    
                #Button Cancel
                $CancelButton = New-Object System.Windows.Forms.Button
                $CancelButton.Location = New-Object System.Drawing.Size(250,690)
                $CancelButton.Size = New-Object System.Drawing.Size(75,23)
                $CancelButton.Text = „Cancel“
                $CancelButton.DialogResult = „Cancel“
                $fenster.Controls.Add($CancelButton)
    
    [void] $fenster.ShowDialog()
                
                 
                      $testbsp = $textBox8.Text 
                      $testbsp1 = $textBox9.Text
                      $fehlermodus = 1
    
                while( $fehlermodus -ne 0)
                {
                        
                      $testbsp = $textBox8.Text 
                      $testbsp1 = $textBox9.Text
    
                    If($testbsp.Length -ne 3)
                    {
                        $label1.Text = "Länge prüfen"
                        $fehlermodus = 1
                        
                    }
                    else
                    {
                        $label1.Text = ""
                        $fehlermodus = 0
                    }
    
    
                    If($testbsp1.Length -ne 3)
                    {
                        $label4.Text = "Länge prüfen"
                        $fehlermodus = 1
                        
                    }
                    else
                    {
                        $label4.Text = ""
                        If($fehlermodus -ne 1){$fehlermodus = 0} else {$fehlermodus = 1}
                    }
    
                    If($testbsp1 -eq "")
                    {
                        $label1.Text = "Bitte etwas eintragen"
                    }
                    else
                    {
                        $label1.Text = ""
                       If($fehlermodus -ne 1){$fehlermodus = 0} else {$fehlermodus = 1} 
                    }
    
                    If($testbsp1 -eq "")
                    {
                        $label4.Text = "Bitte etwas eintragen"
                    }
                    else
                    {
                       $label4.Text = ""
                       If($fehlermodus -ne 1){$fehlermodus = 0} else {$fehlermodus = 1} 
                    }
    
    
                    [void] $fenster.ShowDialog()
                    
                                 
               }

    Dienstag, 5. Juni 2018 10:24

Antworten

  • Das nötige zweimalige Schließen des Fensters liegt daran, das du das Fenster zweimal anzeigst (...showDialog()).  :-)
     
    Ich glaube das du das gemacht hast, weil du nicht ganz verstanden hast wie WinForms funktionieren. Im Gegensatz zu einem "normalen" Skript, das (abgesehen vom Aufruf von Funktionen) von Oben nach unten abgearbeitet wird, ist eine Form Event-(Ereignis-)gesteuert. Das heißt nach deinem ersten ShowDialog() bleibt das Script an dieser Stelle stehen und jeglicher Code dahinter wird erst ausgeführt, nachdem du die Form wieder geschlossen hast.
    Damit trotzdem was passiert, während das Fenster sichtbar ist, musst du Events definieren, die bei bestimmten Aktionen ausgeführt werden. Wenn du beispielsweise eine Eingabe in eine Textbox prüfen willst, gibt es diverse Events die ausgeführt werden wenn du reinklickst, oder etwas reintippst. Siehe LINK

    Schau mal hier, ich habe mal ein Tutorial zu den Basics geschrieben, vielleicht hilft das: LINK

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.


    Donnerstag, 7. Juni 2018 14:36
    Moderator

Alle Antworten

  • "DialogResult" ist ein numerischer Wert:

    https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.dialogresult

    Bei der Zuweisung von Cancel (2!) erfolgt keine Validierung mehr.
    Also:

    $erstellenButton.DialogResult = 1
    $CancelButton.DialogResult = 2

    if ($fenster.ShowDialog() -eq 1) {...}


    Dienstag, 5. Juni 2018 11:25
  • Das nötige zweimalige Schließen des Fensters liegt daran, das du das Fenster zweimal anzeigst (...showDialog()).  :-)
     
    Ich glaube das du das gemacht hast, weil du nicht ganz verstanden hast wie WinForms funktionieren. Im Gegensatz zu einem "normalen" Skript, das (abgesehen vom Aufruf von Funktionen) von Oben nach unten abgearbeitet wird, ist eine Form Event-(Ereignis-)gesteuert. Das heißt nach deinem ersten ShowDialog() bleibt das Script an dieser Stelle stehen und jeglicher Code dahinter wird erst ausgeführt, nachdem du die Form wieder geschlossen hast.
    Damit trotzdem was passiert, während das Fenster sichtbar ist, musst du Events definieren, die bei bestimmten Aktionen ausgeführt werden. Wenn du beispielsweise eine Eingabe in eine Textbox prüfen willst, gibt es diverse Events die ausgeführt werden wenn du reinklickst, oder etwas reintippst. Siehe LINK

    Schau mal hier, ich habe mal ein Tutorial zu den Basics geschrieben, vielleicht hilft das: LINK

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.


    Donnerstag, 7. Juni 2018 14:36
    Moderator
  • Vielen Dank für die schnellen Beiträge, dann mach ich mich mal wieder ans Werk.
    Montag, 11. Juni 2018 08:46