2 verschiedene GUIs - Button funktioniert nicht

  • Hallo ihr :)

    Da ich nun schon seit fast 4 Stunden an meinem Problem hocke - und nirgends eine Lösung gefunden habe, schreibe ich hier mal:

    Ich habe n kleines Script geschrieben, oder eher: WILL es schreiben ... womit man Daten erfassen kann - und dann in eine .txt datei schreiben kann. Das funktioniert auch wunderbar.

    Meine Parent-GUI beinhaltet einen Button - wenn ich auf diesen Button klicke - öffnet sich meine ChildGUI ... funktioniert auch
    In der ChildGUI ist mein "Formular" und mein "Speichern" Button - wenn ich auf Speichern gehe, speichert er es auch ab - und schließt sich.

    Dann sehe ich wieder die ParentGUI wie am Anfang - mit dem Button.

    Wenn ich nun auf diesen Button klicke - funktioniert es aber nicht mehr.

    Sprich: Ich kann immer nur EINMAL auf diesen Button klicken - danach geht er nicht mehr.

    Hat jemand von Euch eine Lösung parat ?

    Wäre euch echt Dankbar!

    Hier das script

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <file.au3>

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

    local $speichern, $download_sql, $download_files, $ini_usr, $ini_pwd, $ini_dir, $Button_browse

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

    $winhandle = GUICreate("Blubb", 400, 420)

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

    $ini_pfad= IniRead ( "setup.ini", "settings", "pfad", "c:\tmp\lala")

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

    If FileExists($ini_pfad) Then
    Else
    DirCreate($ini_pfad)
    Endif

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

    $tab=GUICtrlCreateTab (0,0, 400,400)

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

    $tab1=GUICtrlCreateTabitem ("Neuer Eintrag")

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

    $tab1_speichern = GUICtrlCreateButton ( "Eintrag machen", 290, 40, 100, 20)

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

    $tab1_ende=GUICtrlCreateTabitem ("")

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

    GUISetState ()

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

    While 1

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

    $msg = GUIGetMsg($winhandle)
    Select

    Case $msg = $GUI_EVENT_CLOSE
    GUIDelete()
    Exit

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

    Case $msg = $tab1_speichern

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

    $neuereintrag = GUICreate("Neuen Kontakt eintragen", 400, 420, "", "", "", "", $winhandle)
    $tab=GUICtrlCreateTab (0,0, 400,400)
    $start=GUICtrlCreateTabitem ("Neuer Eintrag")
    GUICtrlCreateLabel ("Vorame: ", 10, 40, 60)

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

    $input1 = GUICtrlCreateInput ( "", 80, 40, 200, 20)

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

    $tab1_speichern = GUICtrlCreateButton ( "Speichern", 290, 40, 100, 20)
    $ende=GUICtrlCreateTabitem ("")

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

    GUISetState ()

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

    While 1
    $msg2 = GUIGetMsg($neuereintrag)
    Select

    Case $msg2 = $GUI_EVENT_CLOSE
    GUIDelete($neuereintrag)
    Exit

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

    Case $msg2 = $tab1_speichern

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

    $file_remote = FileOpen($ini_pfad & "\db.xml", 1)
    FileWrite($file_remote, "Bla=" & GUICtrlRead($input1) & "..." @CRLF)
    FileClose($file_remote)

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

    MsgBox(64, "INFO", "Die Daten wurden erfolgreich gespeichert!")
    GUIDelete($neuereintrag)
    GUISetState(@SW_SHOW, $winhandle)

    EndSelect
    GUISetState(@SW_SHOW, $winhandle)
    Wend

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

    EndSelect
    Wend

    [/autoit]

    Vielen Dank schonmal!!!

    MfG
    Ezz

    Einmal editiert, zuletzt von Ezz (31. Juli 2008 um 19:07)

  • Du hast bei deiner 2. GUI die gleichen Variablen genommen wie bei deiner 1.
    Deshalb haben die, nachdem die 2.GUI geschlossen wurde, immernoch die CtrlIds der
    Controls aus der 2.GUI drin.. :P

    Du müsstest der 2.GUI einfach andere Variablen geben ;)

    Kleiner Tipp am Rande:
    Es ist schöner, die ganzen GUIs erst zu erstellen und bei Bedarf mit GUISetState
    anzeigen zu lassen ;)

    limette

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • Mhh...

    habe das jetzt so geändert --> klappt aber trotzdem noch net?

    Ich würde gerne deinen Tipp befolgen

    Aber irgendwie check ich das mit den GUISetState net so ganz ... ich hab das da zwar n paar mal drin bei mir --> aber ich glaub das ändert auch nix daran !

  • Ach, nach dem Case $msg2 = $tab1_speichern (oder wie du die Variable genannt hast),
    also nachdem man den Speichern-Button geklickt hat, fehlt noch ein ExitLoop !
    So löscht er nur die GUI, bleibt aber in der While - Schleife ;)

    limette

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • so dürfte es klappen

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Local $speichern, $download_sql, $download_files, $ini_usr, $ini_pwd, $ini_dir, $Button_browse

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

    $winhandle = GUICreate("Blubb", 400, 420)

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

    $ini_pfad = IniRead("setup.ini", "settings", "pfad", "c:\tmp\lala")

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

    If FileExists($ini_pfad) Then
    Else
    DirCreate($ini_pfad)
    EndIf

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

    $tab = GUICtrlCreateTab(0, 0, 400, 400)
    $tab1 = GUICtrlCreateTabItem("Neuer Eintrag")
    $tab1_speichern = GUICtrlCreateButton("Eintrag machen", 290, 40, 100, 20)
    $tab1_ende = GUICtrlCreateTabItem("")

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

    $neuereintrag = GUICreate("Neuen Kontakt eintragen", 400, 420, "", "", "", "", $winhandle)
    $tab2 = GUICtrlCreateTab(0, 0, 400, 400)
    $start = GUICtrlCreateTabItem("Neuer Eintrag")
    GUICtrlCreateLabel("Vorname: ", 10, 40, 60)

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

    $input1 = GUICtrlCreateInput("", 80, 40, 200, 20)
    $tab1_speichern2 = GUICtrlCreateButton("Speichern", 290, 40, 100, 20)
    $ende = GUICtrlCreateTabItem("")

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

    GUISetState(@SW_SHOW, $winhandle)

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

    While 1
    $msg = GUIGetMsg($winhandle)
    $msg2 = GUIGetMsg($neuereintrag)
    Select

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

    Case $msg = $GUI_EVENT_CLOSE
    Exit

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

    Case $msg = $tab1_speichern
    GUISetState(@SW_HIDE, $winhandle)
    GUISetState(@SW_SHOW, $neuereintrag)

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

    Case $msg2 = $tab1_speichern2
    $file_remote = FileOpen($ini_pfad & "\db.xml", 1)
    FileWrite($file_remote, "Bla=" & GUICtrlRead($input1) & "..." & @CRLF)
    FileClose($file_remote)

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

    MsgBox(64, "INFO", "Die Daten wurden erfolgreich gespeichert!")
    GUISetState(@SW_HIDE, $neuereintrag)
    GUISetState(@SW_SHOW, $winhandle)
    EndSelect
    WEnd

    [/autoit]
  • Uhiii
    cool, danke

    das wars :)

    VIELEN DANK :)

    Jetzt minimiert er das Fenster zwar ständig - aber naja... wird wohl normal sein.

    DANKE !

  • Das kannst du ja noch mit nem GUISetState( @SW_RESTORE, $winhandle ) beheben ;)

    Tweaky: War auch gerade dabei das umzuschreiben.. :P

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • Mhh... könntet ihr mir evtl. nochmal helfen?

    Also:

    HAbe das script etz so umgeschrieben, dass es eben "schön" ausschaut ... also GUIs u. rest getrennt u.s.w..... würde auch funktionieren

    bis auf das eine problem:

    Ich klicke auf den Button dass sich det 2. GUI öffnet
    --> case $msg2 = $gui2_name

    .. wie rufe ich da etz diese $gui2_erstellen auf ... wenn $gui2_erstellen = GUICreate() ist ...

    also ich will halt, dass dieses Gui JEDES MAL neu erzeugt wird - und JEDES MAL (nach dem speichern) deleted wird...

  • Das von Tweaky war doch schön ? ^^
    Schick mal den Code mit nem Kommentar, wo die GUI neu erstellt werden soll ;)

    limette

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • Naja.... das hat aber die blöde eigenschaft (okay - das hat meins etz auch) dass ich bis zu 5 mal auf den button klicken muss, bevor sich was tut :(

    (Zeile 77 ! )


    Spoiler anzeigen
    [autoit]


    < Sorry musste ich entfernen :( >

    [/autoit]

    Danke schonmal !

    Einmal editiert, zuletzt von Ezz (31. Juli 2008 um 20:37)

  • Öhm, nimm mal den Parameter bei GuiGetMsg raus ! xD
    GuiGetMsg hat nur einen optionalen Parameter, und der ist entweder 0 oder 1,
    das bestimmt nur, in welcher Form die Events ausgegeben werden.
    Du kannst da nicht einfach ein Window-Handle angeben, das bringt nichts, außer Fehler ;)

    Und warum soll das Fenster immer neu erstellt werden ?
    Du kannst das doch einfacher verstecken mit
    GUISetState(@SW_HIDE, $kontaktfenster)
    und zeigen mit
    GUISetState(@SW_SHOW, $kontaktfenster),
    so wie das da auch schon ist.
    Evtl. eingetragene Daten kannst du ja mit GuiCtrlSetData zurücksetzen..

    Ansonsten, wenn du das immer wieder komplett neu machen musst:
    Erstell dir dafür eine Funktion

    Func _create()
    $gui = GuiCreate( 'nananaa' )
    ;...
    EndFunc

    und deklariere die dafür genutzten Variablen "Global",
    dann müsstest du nur in der Zeile, wo sie erstellt werden soll, die Funktion aufrufen.

    limette

    Edit: Bin jetzt erst weg, bis später, gutes Gelingen ;)

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • :( Schade

    Also habs etz mal so gemacht, wie du sagstest

    a) ich muss immernoch voll oft auf nen Button klicken bis sich was tut --> das nervt :( --> Erledigt *freu*

    b) joa... genau wegen den Formularfeldern da will ich das neu erzeugen lassen --> weil ich die einfach net leer bekomme !
    ich verstehe net, wie ich diese funktion anwenden soll

    Jedoch das mit den Formulardaten check ich nich :( Kann mir das bitte jmd. anhand eines beispieles erklären ?!?!
    DANKE

    Einmal editiert, zuletzt von Ezz (31. Juli 2008 um 20:44)

    • Offizieller Beitrag

    Ich habe Dein Script mal angepasst:

    Spoiler anzeigen
    [autoit]


    #include<Array.au3>
    #include<GUIConstantsEx.au3>

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

    Global $speichern, $ini_usr, $ini_dir

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

    $ini_pfad = IniRead(@ScriptDir & "\setup.ini", "settings", "pfad", "c:\asjnbg\mdb_mobile") ; geändert

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

    If Not FileExists($ini_pfad) Then DirCreate($ini_pfad) ; geändert

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

    ; ##### HAUPT FENSTER ################
    $hauptfenster = GUICreate("blubb", 400, 420)
    $tabfenster = GUICtrlCreateTab(0, 0, 400, 400)

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

    $tab_neuer_eintrag = GUICtrlCreateTabItem("Neuer Eintrag")
    GUICtrlCreateLabel("Klicke auf >Eintrag machen< um ein neues Fenster zu öffnen, in dem die Kontaktdaten eingetragen werden können.", 10, 40, 220, 50)
    $b_neueintragmachen = GUICtrlCreateButton("Eintrag machen", 10, 110, 100, 20)

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

    $tabende_neuer_eintrag = GUICtrlCreateTabItem("")

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

    $tab_update = GUICtrlCreateTabItem("Update")
    GUICtrlCreateLabel("Klicke auf >Hochladen< um die aktuell auf deinem Computer gespeicherte Datenbank auf den Server zu übertragen.", 10, 40, 220, 100)
    $b_update_manager = GUICtrlCreateButton("Hochladen", 290, 40, 100, 20)

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

    $tabende_update = GUICtrlCreateTabItem("")

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

    ;#################################################################################################
    ;#################################################################################################

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

    ; ##### KONTAKT EINTRAGEN FENSTER #######
    $kontaktfenster = GUICreate("Neuen Kontakt eintragen", 400, 420, -1, -1, -1, -1, $hauptfenster)

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

    $tabfenster_2 = GUICtrlCreateTab(0, 0, 400, 400)
    $tab_neuer_kontakt = GUICtrlCreateTabItem("Neuer Kontakt")
    GUICtrlCreateLabel("Vorame: ", 10, 40, 60)

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

    $input1 = GUICtrlCreateInput("", 80, 40, 200, 20)

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

    $b_kontakt_speichern = GUICtrlCreateButton("Speichern", 290, 40, 100, 20)
    $b_kontakt_abbrechen = GUICtrlCreateButton("Abbrechen", 290, 60, 100, 20)

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

    $tabende_neuer_kontakt = GUICtrlCreateTabItem("")

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

    ;#################################################################################################
    ;#################################################################################################

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

    GUISetState(@SW_SHOW, $hauptfenster)

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

    ; Die gesamte While-WEnd-Schleife angepasst
    While 1
    $aMsg = GUIGetMsg(1)
    Switch $aMsg[1]
    Case WinGetHandle($hauptfenster)
    Switch $aMsg[0]
    Case $GUI_EVENT_CLOSE
    Exit
    Case $b_neueintragmachen
    GUISetState(@SW_SHOW, $kontaktfenster)
    Case $b_update_manager
    MsgBox(0, 'Test', 'Update starten...') ; Update starten
    EndSwitch
    Case WinGetHandle($kontaktfenster)
    Switch $aMsg[0]
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_HIDE, $kontaktfenster)
    Case $b_kontakt_speichern
    $file_remote = FileOpen($ini_pfad & "\db.xml", 1)
    FileWrite($file_remote, "Name=" & GUICtrlRead($input1) & @CRLF)
    FileClose($file_remote)
    MsgBox(64, "INFO", "Die Kontakt Daten wurden erfolgreich gespeichert!")
    GUISetState(@SW_HIDE, $kontaktfenster)
    Case $b_kontakt_abbrechen
    MsgBox(64, "INFO", "Eingabe der Daten abgebrochen!")
    GUISetState(@SW_HIDE, $kontaktfenster)
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]
  • Cool, danke !!

    Hast du dann evtl. ne Lösung dafür, dass die Formulardaten da dann gelöscht werden, nach dem speichern ? Also dass beim erneuten eintragen da nicht noch das von vorher drin steht ?

    • Offizieller Beitrag

    Einfach noch eine Zeile beim Speichern-Case einfügen:

    [autoit]


    Case $b_kontakt_speichern
    $file_remote = FileOpen($ini_pfad & "\db.xml", 1)
    FileWrite($file_remote, "Name=" & GUICtrlRead($input1) & @CRLF)
    FileClose($file_remote)
    MsgBox(64, "INFO", "Die Kontakt Daten wurden erfolgreich gespeichert!")
    GUISetState(@SW_HIDE, $kontaktfenster)
    GUICtrlSetData($input1, "") ; <--- diese hier

    [/autoit]