Zweites GUI-Fenster reagiert nicht auf Nutzerinteraktion

  • Hallo AutoIt-Community,

    ich habe gerade begonnen mich in AutoIt einzuarbeiten und habe Schwierigkeiten bei der Erstellung mehrerer GUI's. Wenn ich eine GUI erstelle funktionieren alle Funktionen einwandfrei. Wenn ich allerdings noch eine zweite GUI öffnen lasse, kann man von dieser keine Aktionen mehr ausführen ?( .

    Hier ist mein Script (ich habe das Unwichtige rausgelassen):

    [autoit]


    #include <GUIConstants.au3>
    #include <ButtonConstants.au3>
    Global $mainwindow, $button1, $buttonE, $app1, $button3

    runHaupt()

    Func runHaupt()
    Opt("GUIOnEventMode", 1)
    $mainwindow = GUICreate("main", 400, 200)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Ende")
    GUICtrlCreateLabel("Hauptprog", 30, 10)
    $button1 = GUICtrlCreateButton ("App1", 10, 30, 72, 72)
    $buttonE = GUICtrlCreateButton ("Exit", 100, 30, 72, 72)
    GUICtrlSetOnEvent($button1, "app1")
    GUICtrlSetOnEvent($buttonE, "Ende")
    GUISetState(@SW_SHOW, $mainwindow)
    Wait()
    EndFunc

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

    Func app1()
    ;dieses GUI-Fenster wird zwar noch geöffnet, aber es funktioniert keine schaltfläche, ...
    GUISetState(@SW_HIDE, $mainwindow)
    $app1 = GUICreate("app1", 200, 250)
    GUISetOnEvent($GUI_EVENT_CLOSE, "GUIende")
    GUICtrlCreateLabel("app1", 30, 10)

    $button3 = GUICtrlCreateButton ("Test", 20, 200, 36, 36)
    GUICtrlSetOnEvent($button3, "ok")
    GUISetState(@SW_SHOW, $app1)
    Wait()
    EndFunc
    Func ok()
    ;dies würde aufgerufen werden, wenn die schaltfläche "Test" funktionieren würde
    msgbox(0, "", "Die App haut jetzt hin!")
    EndFunc
    Func Wait()
    While 1
    Sleep(1000)
    WEnd
    EndFunc
    Func GUIende()
    GUISetState(@SW_HIDE, $app1)
    GUISetState(@SW_SHOW, $mainwindow)
    EndFunc
    Func Ende()
    Exit
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von jackomo92 (19. September 2011 um 18:20)

    • Offizieller Beitrag

    z.B. so:

    Spoiler anzeigen
    [autoit]

    ; 2GUI_GUIGetMsg_1
    #include<GUIConstantsEx.au3>
    Local $gui1, $gui2, $btn1, $btn2, $msg

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

    $gui1 = GUICreate('GUI 1')
    $btn1 = GUICtrlCreateButton('Zeige GUI 2', 10, 20, 100, 20)

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

    $gui2 = GUICreate('GUI 2')
    $btn2 = GUICtrlCreateButton('Button 2', 10, 20, 100, 20)

    [/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
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $btn1
    GUISetState(@SW_HIDE, $gui1)
    GUISetState(@SW_SHOW, $gui2)
    EndSwitch
    Case $gui2
    Switch $msg[0]
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_SHOW, $gui1)
    GUISetState(@SW_HIDE, $gui2)
    Case $btn2
    MsgBox(0, '', 'Button 2 geklickt')
    EndSwitch
    EndSwitch
    WEnd
    GUIDelete($gui1)
    GUIDelete($gui2)

    [/autoit]
    • Offizieller Beitrag

    Deine Funktion Wait ist daran Schuld.
    So sollte es gehen:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <ButtonConstants.au3>
    Global $mainwindow, $button1, $buttonE, $app1, $button3
    Opt("GUIOnEventMode", 1)
    runHaupt()
    While 1
    Sleep(50)
    WEnd

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

    Func runHaupt()
    $mainwindow = GUICreate("main", 400, 200)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Ende")
    GUICtrlCreateLabel("Hauptprog", 30, 10)
    $button1 = GUICtrlCreateButton("App1", 10, 30, 72, 72)
    $buttonE = GUICtrlCreateButton("Exit", 100, 30, 72, 72)
    GUICtrlSetOnEvent($button1, "app1")
    GUICtrlSetOnEvent($buttonE, "Ende")
    GUISetState(@SW_SHOW, $mainwindow)
    EndFunc ;==>runHaupt

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

    Func app1()
    ;dieses GUI-Fenster wird zwar noch geöffnet, aber es funktioniert keine schaltfläche, ...
    GUISetState(@SW_HIDE, $mainwindow)
    $app1 = GUICreate("app1", 200, 250)
    GUISetOnEvent($GUI_EVENT_CLOSE, "GUIende")
    GUICtrlCreateLabel("app1", 30, 10)
    $button3 = GUICtrlCreateButton("Test", 20, 200, 36, 36)
    GUICtrlSetOnEvent($button3, "ok")
    GUISetState(@SW_SHOW, $app1)

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

    EndFunc ;==>app1
    Func ok()
    ;dies würde aufgerufen werden, wenn die schaltfläche "Test" funktionieren würde
    MsgBox(0, "", "Die App haut jetzt hin!")
    EndFunc ;==>ok

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

    Func GUIende()
    GUISetState(@SW_HIDE, $app1)
    GUISetState(@SW_SHOW, $mainwindow)
    EndFunc ;==>GUIende
    Func Ende()
    Exit
    EndFunc ;==>Ende

    [/autoit]