Gui mit eingabe kontrolle

  • Hi @ all ich habe mal wieder ein problem und bitte um eure hilfe.

    Was ich vor habe ist ein Esay installer anzufertigen. In meiner Gui sind 4 comboboxe und 2 radio button. mein problem ist momentan der wenn keine radiobox ausgewehlt ist lasse ich eine msgbox ausgeben doch das script rent dann ganz normal weiter wie kann ich das verhindern so das das script wieder auf case $button wartet?

    [autoit]


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

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

    Case $Button2
    Exit

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

    Case $Button1
    $Label6 = GUICtrlCreateLabel("Begine das Auslesen der User eingaben.", 280, 400, 385, 17)
    Auslesen ()

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

    EndSwitch
    WEnd

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

    Func Auslesen ()
    $PSPTYP = GUICtrlRead ($Combo1)
    $DATECODE = GUICtrlRead ($Combo2)
    $AktuelleFW = GUICtrlRead ($Combo3)
    $PSPLaufwerk = GUICtrlRead ($Combo4)
    $OFW=GUICtrlRead ($Radio1)
    $CFW=GUICtrlRead ($Radio2)
    If $PSPTYP = "Bitte Wählen" Then
    MsgBox (0x30,"Fehler", "Es fehlen noch angaben zum Typ der PSP. " &@CRLF&@CRLF&"Diese finden sie im Akku fach.")
    error ()

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

    ElseIf $DATECODE = "Bitte Wählen" Then
    MsgBox (0x30,"Fehler", "Es fehlen noch angaben zum DATECODE der PSP. " &@CRLF&@CRLF&"Diese finden sie im Akku fach.")
    error ()
    ElseIf $AktuelleFW = "Bitte Wählen" Then
    MsgBox (0x30,"Fehler", "Es fehlen noch angaben zur aktuellen FW der PSP." &@CRLF&@CRLF&" Diese finden sie im bereich System-Einstellung/Systeminformation in ihrer PSP.")
    error ()
    EndIf
    Sleep (3000)
    $Label6 = GUICtrlCreateLabel("Begine das Auswerten der User eingaben.", 280, 400, 385, 17)
    Auswerten ()
    EndFunc

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

    Func Auswerten ()
    If $PSPTYP = "PSP 1004 ( PSP Fat )" Then Fat ()
    If $PSPTYP = "PSP 2004 ( PSP Slim )" Then Slim ()
    If $PSPTYP = "PSP 3004 ( PSP 3000 )" Then PSP3000 ()
    EndFunc

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

    Func Fat ()
    If $CFW = 1 Then FatA ()
    If $OFW = 1 Then FatB ()
    If $CFW = $OFW Then
    MsgBox (0x30,"Fehler", "Es fehlen noch angabe zu ihrer aktuellen FW." &@CRLF&@CRLF&"Diese finden sie im bereich System-Einstellung/Systeminformation bei einrt einfachern FW nummer ist es eine OFW und bei zusätsen wie m33 oder ehnlichem handelt es sich um eine CFW. ")
    error ()
    EndIf
    ToolTip ($Install,0,0)
    EndFunc

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

    Func FatA ()
    $Pandafrage = MsgBox (0x4,"Pandora", "Möchten sie eine Pandora erstellen?")
    If $Pandafrage = 6 Then $Install = 3
    If $Pandafrage = 7 Then $Install = 2
    EndFunc

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

    Func FatB ()
    If $AktuelleFW <= "Firmware 5.03" Then $Install = 4

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

    If $AktuelleFW > "Firmware 5.03" Then
    MsgBox (0x30,"Schade", "Mit den von ihnen eingegebenden PSP Daten wird ein Pandora Akku benötigt um die PSP mit einer CFW zu versehen. Für weiter infos steht ihn das PSP-ISO Team im Forum zur verfügung.")
    error ()
    EndIf

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

    EndFunc

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

    Func error ()

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

    $Label6 = GUICtrlCreateLabel("Warte auf User eingabe.", 280, 400, 385, 17)

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

    EndFunc

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

    3 Mal editiert, zuletzt von Evoli_66 (18. Dezember 2009 um 18:22)

  • habe ich ja in zeile 50-52 er springt dann ja auch in zeile 74 und leuft beis 78 weiter doch dann springt er wieder zurück in zeile 53 und macht dort einfach weiter und geht nicht in die Whail schleife von zeile 2-16

  • Ja. Return "unterbricht" eine Funktion vorzeitig. Eigentlich ist der Zweck von Return ein anderer (nämlich einen Wert zurückzugeben), aber das vorzeitige unterbrechen ist natürlich ein schöner Nebeneffekt.

    Als Beispiel mal ein Teil deiner Auslesen() Funktion:

    [autoit]

    ElseIf $DATECODE = "Bitte Wählen" Then
    MsgBox (0x30,"Fehler", "Es fehlen noch angaben zum DATECODE der PSP. " &@CRLF&@CRLF&"Diese finden sie im Akku fach.")
    error ()

    [/autoit]


    Wird zu:

    [autoit]

    ElseIf $DATECODE = "Bitte Wählen" Then
    MsgBox (0x30,"Fehler", "Es fehlen noch angaben zum DATECODE der PSP. " &@CRLF&@CRLF&"Diese finden sie im Akku fach.")
    error ()
    Return 0

    [/autoit]
  • Jein ich vermutte mal weill ich von einer Func zur nehgsten leite unter bricht er das. Grund ist wenn ich das richtig verstanden habe, geht das script von funce zu funce und wenn das letzte Func fertig ist arbeitet das script eine Func vorher weiter bis er über all bei funceend angekommen ist.

    Aber nun da zu war rum ich wieder geöffnet habe ist mir ist was eingefallen wass ich noch ein bauen möchte bleibe aber mal wieder an einer stelle hängen.

    Was ich jetz noch vor habe ist die Combobox zu filtern so das der User nur die möglich hat die auch realistisch sind. Ich habe mal ein beispiel vorbereitet.

    [autoit]

    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 454, 192, 114)
    $Combo1 = GUICtrlCreateCombo("Bitte wählen", 240, 80, 145, 25)
    GUICtrlSetData(-1, "Test 1|Test 2")
    $Combo2 = GUICtrlCreateCombo("Bitte wählen", 240, 112, 145, 25)
    GUICtrlSetData(-1, "Test 1.1|Test 1.2|Test 1.3")
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Combo1
    $comboergebnnis = GUICtrlRead ($Combo1)
    If $comboergebnnis = "Test 1" Then
    $Combo2 = GUICtrlCreateCombo("Bitte wählen", 240, 112, 145, 25)
    GUICtrlSetData(-1, "Test 1.1|Test 1.2|Test 1.3")
    ElseIf $comboergebnnis = "Test 2" Then
    $Combo2 = GUICtrlCreateCombo("Bitte wählen", 240, 112, 145, 25)
    GUICtrlSetData(-1, "Test 2.1|Test 2.2|Test 2.3")
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    Eigendlich leuft das auch aber wenn der User jetzt in combo1 eine fehl eingabe gemacht hat und wegselt die Combo 2 nicht um gibs da eine alternative lösung zu dem problem oder muss ich mit einen resset button arbeiten?

  • Einfach deiner Combobox den Style 0x0003, also $CBS_DROPDOWNLIST geben.
    Außerdem solltest du dir abgewöhnen andauernd neue Controls zu erstellen, sondern mit den bestehenden Controls arbeiten. In deinem BEispiel von eben erstellst du jedes mal eine neue Combobox, wenn der User etwas auswählt. das ist doch total unnötig und führt dazu, dass dein Skript irgendwann 2GB an speicher braucht, wenn man oft genug hin und her wechselt.

    Spoiler anzeigen
    [autoit]

    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GUICombobox.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 454, 192, 114)
    $Combo1 = GUICtrlCreateCombo("Bitte wählen", 240, 80, 145, 25,$CBS_DROPDOWNLIST)
    GUICtrlSetData(-1, "Test 1|Test 2")
    $Combo2 = GUICtrlCreateCombo("Bitte wählen", 240, 112, 145, 25,$CBS_DROPDOWNLIST)
    GUICtrlSetData(-1, "Test 1.1|Test 1.2|Test 1.3")
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Combo1
    $comboergebnnis = GUICtrlRead ($Combo1)
    If $comboergebnnis = "Test 1" Then
    GUICtrlSetData($Combo2, "|Bitte wählen|Test 1.1|Test 1.2|Test 1.3")
    _GUICtrlComboBox_SetCurSel($Combo2,0)
    GUICtrlSetState($Combo2, $GUI_ENABLE)
    ElseIf $comboergebnnis = "Test 2" Then
    GUICtrlSetData($Combo2, "|Bitte wählen|Test 2.1|Test 2.2|Test 2.3")
    _GUICtrlComboBox_SetCurSel($Combo2,0)
    GUICtrlSetState($Combo2, $GUI_ENABLE)
    EndIf
    EndSwitch
    WEnd

    [/autoit]
    Zitat

    Jein ich vermutte mal weill ich von einer Func zur nehgsten leite unter bricht er das. Grund ist wenn ich das richtig verstanden habe, geht das script von funce zu funce und wenn das letzte Func fertig ist arbeitet das script eine Func vorher weiter bis er über all bei funceend angekommen ist.

    Ich glaube, du hast das Prinzip von Return nicht ganz verstanden.
    Hier mal ein Beispiel:

    Spoiler anzeigen
    [autoit]

    If _eins() = "Zahl" Then
    MsgBox(0,"","Du hast eine Zahl eingegeben")
    Else
    MsgBox(0,"","Du hast keine Zahl eingegeben")
    EndIf

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

    Func _eins()
    MsgBox(0,"_eins()","Jetzt grade läuft funktion 1. Danach startet sofort _zwei().")
    $ReturnVonFunktion = _zwei()
    MsgBox(0,"_eins()","Funktion 2 hat gemeldet, dass du '"&$ReturnVonFunktion&"' eingegeben hast")
    If Number($ReturnVonFunktion) <> 0 Then
    Return "Zahl"
    Else
    Return "Keine Zahl"
    EndIf
    MsgBox(0,"","Diese MsgBox siehst du garnicht, weil vorher der Return stattfindet, und diese (und NUR DIESE) funktion unterbrochen wird")
    EndFunc

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

    Func _zwei()
    MsgBox(0,"_zwei()","jetzt grade läuft _zwei(). Die Funktion gibt mithilfe von Return etwas zurück, das du jetzt eingibst.")
    $input = InputBox("_zwei()","gib etwas ein")
    Return $input
    EndFunc

    [/autoit]