GUISwitch wechselt nicht die aktive GUI

  • Hallo,
    ich habe folgendes Problem:

    [autoit]

    #include <GUIConstants.au3>

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

    $Form1 = GUICreate("Form2", 413, 298, 291, 177)
    GUISetState(@SW_SHOW)

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

    $Form2 = GUICreate("popup", 413, 298, 291, 177)
    GUISetState(@SW_SHOW)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    If IsDeclared("Form2") AND GUIDelete($Form2) Then
    MsgBox(0,"",GUISwitch($Form1))
    ContinueCase
    EndIf
    MsgBox(0,"","GUI Close")
    GUIDelete()
    EndSwitch
    WEnd

    [/autoit]

    Es geht darum, dass er wenn das zweite Fenster (Form2) offen ist und ein $GUI_EVENT_CLOSE ausgelöst wird dieses Fenster zwar schließt, aber nicht das erste. (Also wenn ich dann wieder ein $GUI_EVENT_CLOSE auslöse) Wenn ich bei GUIDelete() das Handle mitgebe macht er es, aber warum wechselt nicht GUISwitch schon das aktive Fenster?

    Danke für die Antwort im voraus

    2 Mal editiert, zuletzt von Dr.Doktor (4. Februar 2010 um 13:53)

  • Ist es das was du möchtest?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    $Form1 = GUICreate("Form1", 413, 298, 291, 177)
    GUISetState(@SW_SHOW)

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

    $Form2 = GUICreate("popup", 413, 298, 291, 177)
    GUISetState(@SW_SHOW)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    If IsDeclared("Form1") AND GUIDelete($Form2) Then
    MsgBox(0,"",GUISwitch($Form1))
    ContinueCase
    EndIf
    MsgBox(0,"","GUI Close")
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • Ist es das was du möchtest?


    Danke für deine Antwort, aber das ist es leider nicht. Ich habe aus einem Programm was ich schreibe diese Problemstellung auf dieses Beispiel übertragen, deswegen sieht es etwas sinnfrei aus, dass ich die GUI entfernen möchte. Es geht mir darum, dass das GUIDelete() die GUI $Form1 nicht entfernt, obwohl ich vorher mit GUISwitch die $Form1 als aktive GUI ausgewählt habe. Weil wenn ich das Handle in GUIDelete explizit angebe, funktioniert es. Daraus schließe ich, das das Problem irgendwo bei GUISwitch liegt.

  • Ich glaube nicht, denn er möchte ja bestimmt danach noch weitermachen. Außerdem hat er ja schon eine Lösung, und möchte nur wissen, warum GUISwitch nicht funzt...

    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

  • Hallo,
    ich habe folgendes Problem:

    If IsDeclared("Form2") AND GUIDelete($Form2) Then
    MsgBox(0,"",GUISwitch($Form1))
    ContinueCase
    EndIf

    Beim ersten Close wird Form2 geschlossen. Beim zweiten Close wird die If-Abfrage erneut durchlaufen und der Befehl GUIDelete($Form2) ausgeführt. Damit wird ein nicht mehr vorhandenes Fenster aktiviert.

    Richtig ist die Abfrage:
    $aMsg = GUIGetMsg(1)

    und

    If $aMsg[1] = $Form2 Then

    Viele Grüsse
    Detlef

  • Beim ersten Close wird Form2 geschlossen. Beim zweiten Close wird die If-Abfrage erneut durchlaufen und der Befehl GUIDelete($Form2) ausgeführt. Damit wird ein nicht mehr vorhandenes Fenster aktiviert.


    Das verstehe ich aus zwei Gründen nicht:
    1.: Sollte beim zweiten Aufruf das GUIDelete($Form2) nicht mehr aufgerufen werden, da isDeclared("Form2") <> True ist.
    2. Erfolgt das wechseln mittels GUISwitch() NACH dem Aufruf des ungültigen(?) GUIDelete().


    Richtig ist die Abfrage:
    $aMsg = GUIGetMsg(1)

    und

    If $aMsg[1] = $Form2 Then


    Danke, das hilft mir weiter.


  • Das verstehe ich aus zwei Gründen nicht:
    1.: Sollte beim zweiten Aufruf das GUIDelete($Form2) nicht mehr aufgerufen werden, da isDeclared("Form2") <> True ist.
    2. Erfolgt das wechseln mittels GUISwitch() NACH dem Aufruf des ungültigen(?) GUIDelete().

    Hallo
    zu 1.)
    Die Variable $Form2 wurde angelegt und existiert weiter, d.h. = True
    zu 2.)
    Das Wechseln zum GUISwitch erfolgt nur beim ersten Close. Beim zweiten Close wird nur die Bedingung abgearbeitet, egal was darin steht (d.h. unabhängig davon, ob der erste Teil True oder False ist) . Da im 2.Teil eine Funktion drin steht, wird diese auch ausgeführt und damit geht der Fokus auf das Main-Window verloren.

    Viele Grüsse
    Detlef

  • Sicher, dass du nicht hiernach suchst? :

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    $Form1 = GUICreate("Form1", 413, 298, 291, 177)
    GUISetState(@SW_SHOW)

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

    $Form2 = GUICreate("popup", 413, 298, 291, 177)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[0] ; Event
    Case $GUI_EVENT_CLOSE
    Switch $nMsg[1]
    Case $Form1
    Exit
    Case $Form2
    GUISetState(@SW_HIDE,$Form2)
    WinActivate($Form1)
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]