Gui in Gui schließen

  • Abend zusammen

    Folgendes Problem hat sich entwickelt

    Ich habe eine Gui erstellt in welcher man eine weitere Gui aufrufen kann. Nachdem man in der zweiten Gui alles erledigt hat möchte ich diese schließen und wieder mit der ersten Gui arbeiten. Allerdings wird nun das gesammte Skript geschlossen. Habe es auch mit sw_hide versucht was mir im Grunde ja auch gefällt allerdings kann ich nun nicht mehr mit der ersten Gui arbeiten obwohl sie noch angezeigt wird.
    Bitte um andere Lösungsmöglichkeiten Danike

    MfG ScarfacePH

    Einmal editiert, zuletzt von ScarfacePH (17. Juni 2010 um 16:02)

  • Danke für die Antwort
    Jedoch liegt es leider nicht daran das ich in einer schleife hänge.

    Mein Problem ist das ich sobald ich mit hilfe der ersten Gui die zweiten gui starte. wenn die zweite gui nun fertig ist möchte ich nur die zweite gui weg haben sodass man sie wenn man denn möchte erneut mit der ersten gui starten kann. wenn ich nun mit hilfe von "Case $GUI_EVENT_CLOSE"
    GUISetState(@SW_HIDE)
    die zweite gui verschwinden lasse kann ich die erste zwar noch sehen aber nicht mehr steuern.

    Bitte um Rat

  • Der ganze Code ist über 1000 zeilen lang habe daher das betreffende Stück gepostet


    Spoiler anzeigen
    [autoit]


    #Region 1 ### START Koda GUI section ### Form=i:\programme1.kxf
    $Form1_1 = GUICreate("Form1", 848, 573, 192, 124)
    $Analyse = GUICtrlCreateMenu("&Analyse")
    $Datenbankerstellen = GUICtrlCreateMenuItem("Datenbank erstellen", $Analyse)
    $Datenbankaktualisieren = GUICtrlCreateMenuItem("Datenbank aktualisieren", $Analyse)
    $Analysestarten = GUICtrlCreateMenuItem("Analyse starten", $Analyse)
    GUISetState(@SW_SHOW)
    #EndRegion 1 ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Analysestarten

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

    #Region 2 ### START Koda GUI section ### Form=i:\programme\.kxf
    $Form2 = GUICreate("Form2", 390, 321, 328, 243)
    $Input1 = GUICtrlCreateInput("", 32, 40, 121, 21)
    $Checkbox1 = GUICtrlCreateCheckbox("", 8, 40, 17, 17)
    $Startenderanalyse = GUICtrlCreateButton("Analyse starten", 192, 256, 163, 25, $WS_GROUP)
    $List1 = GUICtrlCreateList("", 192, 40, 161, 188)
    GUISetState(@SW_SHOW)
    #EndRegion 2 ### END Koda GUI section ###

    [/autoit]
  • oder den OnEvent Mode / Advanced GUIGetMsg-Mode (findest du alles in der Hilfe zu GUI Referenz)


    Du solltest zumindest ein lauffähiges (Beispiel-)Skript einstellen, bei dem der Fehler (auch) vorkommt.
    Auch solltest du dir die Hilfe zu GUIGetMsg für Fortgeschrittene und mehrere Fenster anschauen

    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (17. Juni 2010 um 12:54)

  • Schau dir mal den OpenWorldBrowser an (Signatur von mir) da benutze ich das auch!
    Das Problem ist es müssen erst alle Fenster geschlossen werden bevor man das Script schließen kann.
    Als erstest erstellst du eine GUi (z.b.) $GUI1 Bei diesem Abscnitt kommmt folgendes hinein:

    [autoit]

    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit]


    In deiner While rufst du am besten eine Funk auf!
    Dort kommt dann der gleiche Code wie sonst auch rein. Nur das in diesem Abschnitt folgendes hinein kommt:

    [autoit]

    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_HIDE, $GUI2)
    ExitLoop

    [/autoit]


    Dann dürfte das funktionieren, jedoch habe ich schon erlebt das es manchml Probleme gibt!

  • Hier mal 2 Gui's im GUIGetMsg() Mode....

    2 GUIS
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Gui1
    $Form1 = GUICreate("gui1", 139, 26, 192, 124)
    $Button1 = GUICtrlCreateButton("gui2", 32, 0, 75, 25)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    #Region ### START Koda GUI section ### Gui2
    $Form2 = GUICreate("gui2", 141, 26, 192, 124)
    $Button2 = GUICtrlCreateButton("gui1", 32, 0, 75, 25)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[1]
    Case $Form1
    Switch $nMsg[0]
    Case $Button1
    GUISetState(@SW_HIDE, $Form1)
    GUISetState(@SW_SHOW, $Form2)
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    Case $Form2
    Switch $nMsg[0]
    Case $Button2
    GUISetState(@SW_SHOW, $Form1)
    GUISetState(@SW_HIDE, $Form2)
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_SHOW, $Form1)
    GUISetState(@SW_HIDE, $Form2)
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]
  • Wieso so kompliziert, wenns auch viel einfacher geht? :

    Spoiler anzeigen
    [autoit]

    Opt("GUIOnEventMode", 1)
    Global $gui2
    GUICreate("gui1", 139, 26, 192, 124)
    GUISetOnEvent(-3, "_exit")
    GUICtrlCreateButton("gui2", 32, 0, 75, 25)
    GUICtrlSetOnEvent(-1, "gui2")
    GUISetState()
    While true
    WEnd
    Func gui2()
    $gui2=GUICreate("gui2", 141, 26, 192, 124)
    GUISetOnEvent(-3, "close")
    GUISetState()
    EndFunc
    Func close()
    GUIDelete($gui2)
    EndFunc
    Func _exit()
    Exit
    EndFunc

    [/autoit]
  • @BurakSZ: Ich würds so schreiben, das ist kürzer:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    $Form1 = GUICreate("gui1", 139, 26, 192, 124)
    $Button1 = GUICtrlCreateButton("gui2", 32, 0, 75, 25)
    GUISetState(@SW_SHOW)

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

    $Form2 = GUICreate("gui2", 141, 26, 392, 324)
    $Button2 = GUICtrlCreateButton("gui1", 32, 0, 75, 25)

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

    While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[0]
    Case $Button1
    ;~ GUISetState(@SW_HIDE, $Form1) ; wenn das erste GUI versteckt werden soll, dann einkommentieren
    GUISetState(@SW_SHOW, $Form2)
    Case $GUI_EVENT_CLOSE, $Button2
    If $nMsg[1] = $Form1 Then Exit
    ;~ GUISetState(@SW_SHOW, $Form1) ; wenn das erste GUI versteckt werden soll, dann einkommentieren
    GUISetState(@SW_HIDE, $nMsg[1])
    EndSwitch
    WEnd

    [/autoit]
  • Wenn man es so macht, kann man den Faden verlieren in welcher GUI man gerade arbeitet ...

  • Wenn man es so macht, kann man den Faden verlieren in welcher GUI man gerade arbeitet ...


    Versteh ich nicht. Man kann doch eh keine Variablen 2x belegen. $Button kann man zb nicht für 2 verschiedene Controls benutzen. Man hat also bei jedem Control einen einzigartigen Namen (deswegen klappt auch der "normale" GUIGetMsg Mode mit 2 GUI's). Der einzige Moment bei dem Unterschieden werden muss ist das GUI_EVENT_CLOSE - und dafür benutzt man dann den Advanced GUIGetMsg Mode, oder OnEvent.

  • cool danke für die vielen Antworten.

    Kann mir jetzt sogar aussuchen welche Lösung mir am besten gefällt klasse.
    Falls noch Probleme mit einem Lösungsversuch auftreten melde ich mich noch einmal. Ansonsten ein großes Lob und Dankeschön an alle Helfer.

    MfG ScarfacePH