Combo Liste mit Abfrage und Rückgabe

  • Abend zusammen,

    ich habe vor 2 Tagen AutoIT für mich entdeckt, da es doch ein enorm mächtiges Werkzeug ist. Nur leider sind meine Programmierkenntnisse eher mäßig bis dürftig. Im Augenblick versuche ich eine einfache Abfrage mit einer Rückgabe mittels einer Drop Down Liste zu machen. Wie Ihr euch nun vorstellen könnt funktioniert das ganze leider nicht so wie ich das möchte :evil:

    Problem 1: Das Schließen des Fensters funktioniert nicht über das herkömmliche X

    Problem 2: Die Ausgabe der Auswahl ist immer die erste, die anderen werden ignoriert. Auch mit ElseIf hat es leider nicht funktioniert.

    Vermutlich ist es ein kleiner Fehler, aber bevor ich mich weiter dumm und dämlich suche, frag ich doch mal direkt die Profis ;)

    Ich hab das Script per Anhang beigefügt, hoffe das ist nicht zu umständlich.

    Gruß

    Mauri

  • Hi,

    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.2.2.0
    Author: Mauri

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

    #ce ----------------------------------------------------------------------------

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

    #include <GUIConstants.au3>

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

    Opt("GUIOnEventMode", 1)

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

    GUICreate("ElseIf Test", 250, 100) ; Fenster erstellen
    GUICtrlSetOnEvent( $GUI_EVENT_CLOSE, "_EXIT" )
    GUICtrlCreateCombo ("", 10,10) ; Drop Down Liste erstellen
    $combo = GUICtrlSetData(-1,"Auswahl1|Auswahl2|Auswahl3|Auswahl4","Auswahl1") ; Inhalt der Liste erstellen
    $auswahl = GUICTRLRead($combo) ; Auswahl der Liste als Variable $auswahl deklarieren
    $okbutton = GUICtrlCreateButton("OK", 10, 50, 60) ; OK Button erstellen
    GUICtrlSetOnEvent($okbutton, "auswahl") ; OK Button die Funktion "auswahl" zuweisen
    $cancelbutton = GUICtrlCreateButton("Cancel", 70, 50, 60) ; Cancel Button erstellen
    GUICtrlSetOnEvent($cancelbutton, "ende") ; Cancel Button die Funktion "ende" zuweisen

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

    GUISetState()

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

    While 1 ; Überprüfung sonstiger Aktivitäten im Fenster
    Sleep(1000)
    $auswahl = GUICtrlRead( $combo )
    WEnd
    Func _EXIT()
    Exit
    EndFunc
    Func auswahl() ; OK Button Funktion - Ausgabe der Auswahl in einer MsgBox
    Select
    Case $auswahl = "Auswahl1"
    MsgBox(64, "Ergebnis", "Auswahl war 1", 10)
    Case $auswahl = "Auswahl2"
    MsgBox(64, "Ergebnis", "Auswahl war 2", 10)
    Case $auswahl = "Auswahl3"
    MsgBox(64, "Ergebnis", "Auswahl war 3", 10)
    Case $auswahl = "Auswahl4"
    MsgBox(64, "Ergebnis", "Auswahl war 4", 10)
    EndSelect
    EndFunc

    [/autoit]

    Zu 1.
    Du hattest OnEventMode aktiviert. Dann funktioniert GuiGetMsg() nicht. Darum musst du $GUI_EVENT_CLOSE die Exit funk zuweisen
    Zu 2.
    Du hast Auswahl direkt am Anfang festgelegt und danach nicht wieder neu abgefragt.

    Mfg

  • Problem 1:

    [autoit]

    GUISetOnEvent($GUI_EVENT_CLOSE, "ende")

    [/autoit]


    Diese Zeile einfach unter deinem GUICreate machen!

    Problem 2:
    Du musst deine Combobox mit GuiCtrlRead ansprechen und das am besten, wenn du den Button drückst, nicht davor. Du musst bedenken, die Zeilen werden von oben nach unten durchgelaufen. Dann wartet das Programm beim While bis ein Event kommt.

    Hier ist das ganze mal fertig, habe es nicht getestet, nur aus dem Stand gemacht!

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Global $combo

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

    Opt("GUIOnEventMode", 1)

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

    GUICreate("ElseIf Test", 250, 100)
    GUISetOnEvent($GUI_EVENT_CLOSE, "ende")
    $combo = GUICtrlCreateCombo ("", 10,10)
    GUICtrlSetData(-1,"Auswahl1|Auswahl2|Auswahl3|Auswahl4","Auswahl1")

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

    $okbutton = GUICtrlCreateButton("OK", 10, 50, 60)
    GUICtrlSetOnEvent($okbutton, "auswahl")

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

    $cancelbutton = GUICtrlCreateButton("Cancel", 70, 50, 60)
    GUICtrlSetOnEvent($cancelbutton, "ende")

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

    GUISetState()

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

    While 1
    Sleep(500)
    Wend
    Exit

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

    Func auswahl()
    $auswahl = GUICtrlRead($combo)
    Select
    Case $auswahl = "Auswahl1"
    MsgBox(64, "Ergebnis", "Auswahl war 1", 10)
    Case $auswahl = "Auswahl2"
    MsgBox(64, "Ergebnis", "Auswahl war 2", 10)
    Case $auswahl = "Auswahl3"
    MsgBox(64, "Ergebnis", "Auswahl war 3", 10)
    Case $auswahl = "Auswahl4"
    MsgBox(64, "Ergebnis", "Auswahl war 4", 10)
    EndSelect
    EndFunc

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

    Func ende()
    Exit
    EndFunc

    [/autoit]
  • Herrlich,

    das war es - GUICtrlRead in der auswahl-Funktion in Kombination mit GUICtrlSetData.

    An $GUI_EVENT_CLOSE hatte ich überhaupt nicht gedacht :rolleyes:

    Danke an euch beide! (Schnelle antworten, Respekt)

    Gruß

    Mauri