Verwaltung verschiedener Dialoge

  • Hallo zusammen!
    Momentan sitze ich an einem Login-Script für jegliche MySQL Server mit Verwaltung für div. Log-Files derer Sessions.
    Mein Problem ist letztendlich sehr einfach zu verstehen. Ich habe einen Main-Dialog, in welchem ich alle Unterdialoge aufrufen kann. Jedoch wenn ich nun z.B. den Dialog "LogFiles", welcher mir alle LogFiles (eine Liste von Dateien) anzeigt, aufrufe und DAZU einen weiteren Dialog geöffnet habe, kann ich nur eines der beiden Dialoge schliessen. Die Close-Funktion des anderen Dialoges funktioniert dann nicht mehr, er schliesst den Dialog einfach nicht.
    Ich habe es anfangs mit WinClose bzw. WinKill ohne Erfolg versucht. Letztendlich habe ich nun immer Funktionen für die jeweiligen Dialoge in Form von "GUISetState(@SW_HIDE)" geschrieben, welche ihr hier unten aber auch sehen werdet.

    Mein Ziel: Mehrere Dialoge öffnen und sie einzelnt schliessen. (Hatte es vorerst immer per EXIT geclosed, aber wenn man etwas in einem anderen Dialog editiert hat, war dies sehr unpraktikabel ;-))

    Meine Vermutung ist ja, dass sich "GUISetState(@SW_HIDE)" nicht für mehrere Dialoge als geeignet ergibt.

    Spoiler anzeigen
    [autoit]


    func Create()
    $create_window = GUICreate("MySQL Query", 300, 320)
    GUISetState(@SW_SHOW)
    Opt("GUIOnEventMode", 1)

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

    ;Evaluation des "X"
    GUISetOnEvent($GUI_EVENT_CLOSE, "CreateClose")

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

    ;Eingabemaske
    GUICtrlCreateLabel("Put in your Query:", 10, 10)
    GUICtrlCreateEdit("", 10, 30, 280, 250, $WS_VSCROLL + $ES_WANTRETURN)

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

    ;Buttons
    $create_sendbutton = GUICtrlCreateButton("Send Query", 10, 287)
    $create_closebutton = GUICtrlCreateButton("Send Query", 10, 287)
    GUICtrlSetOnEvent($create_sendbutton, "Create_Send")
    EndFunc

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

    ;Dies ist halt eines der Dialoge und wird wie folgt geclosed:
    Func CreateClose()
    GUISetState(@SW_HIDE)
    EndFunc

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

    ;Und sobald ein weiterer Dialog geöffnet wurde und ein Dialog geschlossen wurde, kann der zweite Dialog nicht wieder geschlossen werden. Folgend als Beispiel ein zweiter Dialog und wie er geschlossen werden sollte.
    Func ErrorLog()
    GUICreate("MySQLErrorLog", 350,400)
    GUISetState(@SW_SHOW)

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

    ;Evaluation des "X"
    GUISetOnEvent($GUI_EVENT_CLOSE, "ErrorLogClose")
    EndFunc

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

    Func ErrorLogClose()
    GUISetState(@SW_HIDE)
    EndFunc

    [/autoit]


    Danke im Vorraus,

    MfG
    Wiibrew

    • Offizieller Beitrag

    Hallo!

    Habe es jetzt nicht im Detail gelesen, aber grundsätzlich macht man es so:
    Alle GUIs am Anfang anlegen und in einer großen Schleife gemeinsam verwalten. Die GUIs werden nur angezeigt und versteckt (GUISetState). Bei GUISetState immer den zweiten Parameter (GUI-ID) mit angeben. Evtl. ist auch GUISwitch nötig.

    Viel Erfolg,
    peethebee