none
Variable global bei clickevent schreiben RRS feed

  • Frage

  • Hi,

    ich bin relativ neu in der Powershell Welt und komme an einer Gewissen Stelle nicht weiter.

    Ich versuche etwas mit GUIs zu basteln. Jetzt ist mein Frage, ich habe ein Tastendruck Event und möchte damit eine Zahl oder ein Zeichen in eine Variable schreiben, sodass ich ihn außerhalb des Event aber noch verwenden kann.

    Ich habe schon einiges getestet, aber komme leider nicht weiter.

    #Fenster erstellen
    Add-Type -AssemblyName System.Windows.Forms
    $Form                    = New-Object system.Windows.Forms.Form
    $Form.ClientSize         = '500,300'
    $Form.text               = "TestGUI"
    $Form.BackColor          = "#ffffff"
    
    
    Add-Type -AssemblyName System.Windows.Forms
    [System.Windows.Forms.Application]::EnableVisualStyles()
    
    #Strukturen des Fensters
    $Form                            = New-Object system.Windows.Forms.Form
    $Form.ClientSize                 = New-Object System.Drawing.Point(400,400)
    $Form.text                       = "Form"
    $Form.TopMost                    = $false
    
    #Test1 Button
    $Test1                         = New-Object system.Windows.Forms.Button
    $Test1.text                    = "1"
    $Test1.width                   = 200
    $Test1.height                  = 200
    $Test1.location                = New-Object System.Drawing.Point(50,70)
    $Test1.Font                    = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
    
    #Amazon Prime Button
    $Test2                     = New-Object system.Windows.Forms.Button
    $Test2.text                = "2"
    $Test2.width               = 200
    $Test2.height              = 200
    $Test2.location            = New-Object System.Drawing.Point(300,70)
    $Test2.Font                = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
    
    #Disney+ Button
    $Test2                      = New-Object system.Windows.Forms.Button
    $Test2.text                 = "3"
    $Test2.width                = 200
    $Test2.height               = 200
    $Test2.location             = New-Object System.Drawing.Point(550,70)
    $Test2.Font                 = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
    
    $Form.controls.AddRange(@($Test1))
    $Form.controls.AddRange(@($Test2))
    $Form.controls.AddRange(@($Test2))
    
    #Event nach Tastendruck
    $Test1.Add_Click({
       $auswahl = 1
    })
    
    $Test2.Add_Click({
       $auswahl = 2
    })
    
    $Test2.Add_Click({
        Write-Host $script:auswahl Test3
    })
    
    
    
    
    [void]$Form.ShowDialog()
    
    if($auswahl -eq "Test1")
    {
    echo("if1")}
    else
    {
    echo("else3")
    }

    Ich hoffe ihr könnt mir helfen.

    Dankeschön im vorraus.

    Grü0e


    Montag, 14. September 2020 10:08

Alle Antworten

  • Ja, klar, man kann mit Powershell auch etwas Grafisches basteln. Aber sie ist nicht wirklich dafür gemacht und deshalb in dieser Beziehung auch alles andere als intuitiv. Warum sich gerade Anfänger so häufig mit GUI-Frickeleien beschäftigen, werde ich wohl nie verstehen.

    In der Konsole ist Deine Aufgabe mit einer Zeile Code erledigt:

    $variable = Read-Host -Prompt 'Bitte eine Zahl oder ein Zeichen eingeben'
    $variable
    Meine Empfehlung wäre, sich erstmal die Basics draufzuschaffen und die GUI-Basteleien auf später zu verschieben. ;-) 


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Montag, 14. September 2020 13:11
  • Warum sich gerade Anfänger so häufig mit GUI-Frickeleien beschäftigen, werde ich wohl nie verstehen.

    Ich hab da eine Vermutung :-) Ich denke, sie haben am Ende *noch* mehr Angst davor, etwas Kompiliertes mit VB.NET oder C# in die Welt herauszublasen, und dann nicht an Ort und Stelle debuggen zu können.

    Oder, wie gerade in meinem aktuellen Projekt, man hat in Produktion einfach nicht genug Internet-Zugang, um Visual Studio in Betrieb nehmen zu können...


    Evgenij Smirnov

    http://evgenij.smirnov.de

    Montag, 14. September 2020 14:09
  • Ich denke, sie haben am Ende *noch* mehr Angst davor, etwas Kompiliertes mit VB.NET oder C# in die Welt herauszublasen, und dann nicht an Ort und Stelle debuggen zu können. ...

    Hmmm, ok, in die Richtung hatte ich bisher auch noch nicht gedacht. ;-) Man macht sich das Leben aber aus beiden Richtungen unnötig schwer, finde ich.

    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Montag, 14. September 2020 14:33
  • Oder zum Problem:
    Definiere einfach eine Variable am Anfang im Script. Die ist automatisch global und von überall ansprechbar solange du den Namen innerhalb einer Funktion nicht noch mal verwendest.

    Offtopic:

    Ob nun Powershell oder Access oder Excel. Man versucht sich immer wieder an z.T. komplexen GUI's auch für einfache Dinge weil es einfach netter aussieht und von Chefs gerne gefordert wird.
    Der Read-Host ist dazu auch nicht typ-sicher, da kann man auch alles andere als eine Zahl eingaben.
    Dies muss zusätzlich (RegEx) geprüft werden.
    Eine GUI ist da schon sicherer für den Enduser.

    Und was Debugging angeht, so liefere ich generell nur Debug-Versionen aus. Im Fehlerfall gibts das Protokoll des Callstacks und der Fehler ist meist so schneller gefunden.
    In anderen Szenarien wird man dann auch schon mal auf das perfekte Softwareframework hingewiesen, mit der selbst der Laie durch Regelimplementierungen alles machen können soll was zu jedwedem Problem passt um es zu lösen. Explizit wird darauf hingewiesen: Programmierkenntnisse oder gar Datenbankkenntnisse sind nicht nötig.

    Montag, 14. September 2020 20:09
  • Der Read-Host ist dazu auch nicht typ-sicher, da kann man auch alles andere als eine Zahl eingaben.

    Was heißt hier, nicht typ-sicher? Read-Host liefert immer zuverlässig einen String ;-) Oder, mit dem entsprechenden Parameter aufgerufen, einen SecureString...

    Evgenij Smirnov

    http://evgenij.smirnov.de

    Montag, 14. September 2020 21:06
  • Auflösung der Frage warum ich was mit GUI basteln will ist folgendes, anstatt Vodafone und sonstigen Anbietern monatlich zu Zahlen für das Serien streamen, möchte ich mir eine Kleinigkeit schrieben, damit ich per Raspberry pi und einer Fernbedienung mir eine kleine Streamingplatform erschaffen.
    Montag, 14. September 2020 22:08
  • Moin,

    die Verwunderung bezog sich nicht darauf, dass man 2020 noch was mit GUI basteln möchte ;-) sondern darauf, dass es *dann* trotzdem PowerShell sein soll. Skriptsprachen sind dafür naturgemäß weniger geeignet.


    Evgenij Smirnov

    http://evgenij.smirnov.de

    Dienstag, 15. September 2020 06:42
  • Die SreamingPlattform hast du automatisch bereits durch den WindowsMedia-Player. Dieser ist im Netz als Mediaserver erreichbar.

    Ich habe mir vor Jahren eine WD-MyBook (3TB) zugelegt (€89). Die ist im Netz auch als Mediaserver verfügbar.
    Wenn du eine Fritzbox hast (hat ja heute fast jeder), schließe eine USB-Festplatte an und du hast mittels Fritzbox einen weiteren Mediaserver.
    Alle haben integrierte Suchfunktionen nach den bekannten Mediatags.

    Was brauchst du da mehr (außer es mal auprobiert zu haben)?

    Und was den String angeht: diesbezüglich hast du ja recht ein String bleibt ein String, aber es wird ja eine Zahl gefordert (oder mal ein Datum oder sonstwas).


    • Bearbeitet Der Suchende Dienstag, 15. September 2020 07:08
    Dienstag, 15. September 2020 07:06