GUICreate Problem

  • Hallo zusammen,

    ich habe noch ein kleines Problem welches ich nicht in den Griff kriege.

    Ich habe eine GUI (Formular) aus dem ich ein anderes GUI aufrufe. Sobald ich das 2 GUI wieder schliesse (GUIDelete) ist es zwar weg, aber wenn ich auf dem ersten GUI eine Schaltfläche anklicke passiert nix mehr.

    Irgendjemand eine Idee was das sein könnte ?

    Vielen Dank

  • Bin auch in der Boardsuche mittlerweile fündig geworden. Sorry für den voreiligen Post.


    Trotzdem vielen Dank

  • Hallo

    es klappt zwar mit dem Show und Hide.

    Allerdings habe ich folgendes Phänomen:

    Ich starte über die 1.GUI die 2.GUI (die erste GUI wird über SW_HIDE versteckt).

    Beim Schliessen der 2.GUI kommt wieder die 1.GUI. Soweit ok.

    Wenn ich aber nun ein 2 x die 2.GUI wieder starte, habe ich dort alle Registerkarten die angelegt habe doppelt, sowie auch meine Menueführung.

    Mit jedem Mal Öffnen dupliziert sich das ganze.


    Weiß jemand warum ?

    • Offizieller Beitrag

    Hi!

    Nochmal: Am Anfang (vor der While-Schleife, in der die GUI-Events verarbeitet werden), beide GUIs komplett anlegen. Nicht die zweite erst in der Behandlung der ersten. Auch Controls anlegen, deren Text kann man ja ändern (GUICTRLSetData) :) .

    peethebee

  • Hallo

    ich glaube ich scheitere so langsam an meinem Nichtwissen.
    Habe versucht mit der Hilfe etc. zum Ziel zu kommen, aber leider tritt immer noch ein Prob auf. Nach der kurzen Nacht sind meine Augen so langsam ziemlich klein


    Bisher hatte ich immer Autoit Programme die in einer While Schleife und einem GUI liefen. Klappte bisher problemlos.

    Nun brauche ich ein Programm mit mehreren GUIs.


    Und zwar

    Am Anfang startet das GUI mit der Auswahl der Datenbanksysteme (Oracle, SQL etc.).

    Bisher geht nur die Auswahl Oracle10g unter Windows.

    hier geht dann das 2 GUI auf mit allen oben deklarierten Input und Labelfeldern.

    Er zeigt dies auch wunderbar an, aber keine einzige Schalftläche reagiert, d.h. er geht nicht in meine Select Case Abfrage. Hier ist auf jeden Fall das Prob, warum das so ist, tja dafür ist scheinbar mein IQ nicht hoch genug :)


    Ich habe im Prinzip 2 GUIs erstellt, oben am Anfang des Scriptes.

    Danach läuft eine While Schleife über die ich dann das 2 GUI starte.

    Nur das 2 GUI läuft dann nicht mehr in der Schleife sondern über eine Funktion, in der eine Select Case steht.


    Wahrscheinlich ist das nix gscheits, aber I am sorry, ich versuche mit gerade erst.


    Den Code habe ich mit dabei. (leider nur als Anhang, da zu lang, sorry)


    Evtl. kann mir jemand helfen ?? Vielen Dank

    • Offizieller Beitrag

    Wenn du schon mit GUIGetMsg arbeitest (hierfür wirklich nicht empfehlenswert, würde im OnEvent-Mode arbeiten), dann benötigst du bei mehreren GUI natürlich neben der ID des Controls auch die ID der GUI. Dazu gibt es den Advanced-Mode: GUIGetMsg (1).
    Da bekommst du als Return ein Array mit allen erforderlichen Werten - steht ganz ausführlich in der Hilfe.

  • Hi,

    dank Bugfix für die Antwort.

    Diesen Eintrag in der Hilfe hatte ich schon gefunden und auch mit gespielt, jedoch ohne Erfolg bisher.

    Was müsste ich denn alles ändern an meinem jetzigen Programm ?

    Vielleicht kannst du mir noch kurz nen Tip geben. Den Rest hoffe ich das zusammenkriege.

    • Offizieller Beitrag

    Hier mal ein simples Beispiel. Sollte alle Fragen klären.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    $gui1 = GUICreate('GUI 1', 500, 300, -1, -1)
    $button1 = GUICtrlCreateButton('Aufruf GUI 2', 20, 20, 100, 21)

    [/autoit] [autoit][/autoit] [autoit]

    $gui2 = GUICreate('GUI 2', 500, 300, -1, -1)
    $button2 = GUICtrlCreateButton('Zurück zu GUI 1', 20, 20, 100, 21)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW, $gui1)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg(1)
    Switch $msg[1] ; window-handle
    Case $gui1
    Switch $msg[0] ; event/control-handle
    Case $button1
    GUISetState(@SW_HIDE, $gui1)
    GUISetState(@SW_SHOW, $gui2)
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    Case $gui2
    Switch $msg[0]
    Case $button2
    GUISetState(@SW_SHOW, $gui1)
    GUISetState(@SW_HIDE, $gui2)
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_SHOW, $gui1)
    GUISetState(@SW_HIDE, $gui2)
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]
  • Klasse.


    Genau in dem Moment hatte ich auch eine Lösung gefunden mit dem GetMsg.

    Aber mit der Case Abfrage gefällt mir das noch besser.


    herzlichen Dank für alles