GUI Über Radio Buttons Verändern lassen

  • Hallo :)

    Ich stehe vor folgender Aufgabe:
    Ich habe 3 verschiedene "Modi" die ich mit einer Gui abfertigen will und möchte nicht 3 Verschiedene Guis erstellen.
    Diese Modi sind FSMD FSME und FSMD+FPAA (verstehen müsst ihrs nich ;) )

    So was ich bis jetzt habe:

    [autoit]

    Local $msg

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

    GUICreate("Meine GUI")
    GUISetState(@SW_SHOW)
    $fsmdpar=GUICtrlCreateRadio("FSMD",10,20)
    $fsmdfpaapar=GUICtrlCreateRadio("FSMD + FPAA",80,20)
    $fsmepar=GUICtrlCreateRadio("FSME",190,20)
    GUICtrlSetState($fsmdpar, $GUI_CHECKED)
    GUICtrlCreateGroup("Auswahl",5,5,240,40)

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

    While 1
    $msg = GUIGetMsg()

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

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    GUIDelete()

    [/autoit]

    Wie bekomme ich jetzt hin, dass wenn FSMD gedrückt ist z.B. 5 Label + Input Felder kommen für die Eingabe der FSMD Daten und wenn FSME gedrückt ist brauche ich aber 7 Label + Input Felder.

    Wenn ich diese im am Anfang setze vor der Schleife sind sie in meinen Augen ja nichtmehr veränderbar bzw. ich kann nur die Daten in den Feldern verändern aber nicht durch andere Austauschen?
    Also als Beispiel von anfang an ist ein Label mit "FSMD Datensatz 1: [INPUT FELD]" vorhanden und wenn ich jetzt auf FSME drücke soll das verschwinden und das Entsprechende Input Feld und Label für FSME kommen welche dann auch eine Andere Variable haben...

    Ich hoffe ihr konntet mein Problem verstehen,
    wenn nicht nachfragen ;)

    MFG: Black

    Kleiner AutoIt Lehrling :)

  • Du kannst die Label's am Anfang erstellen und danach erstmal auf versteckt schalten:

    [autoit]


    #include <WindowsConstants.au3>
    GUICtrlSetState($hLabel,$GUI_HIDE)

    [/autoit]

    lg chess

    Edit:
    Selbstverständlich GUIConstants.au3 anstatt WindowsConstants.au3. :S

    [autoit]


    #include <GUIConstants.au3>
    GUICtrlSetState($hLabel,$GUI_HIDE)

    [/autoit]
  • Okay so wie ich das verstehe Disable ich also das was ich grade nicht brauche und enable das was ich grade brauche...

    Hier mal beispielweise die Anzahl an Feldern die ich brauche:

    Spoiler anzeigen
    [autoit]

    Local $msg

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

    GUICreate("Parcreator",270,350)
    GUISetState(@SW_SHOW)
    $fsmdpar=GUICtrlCreateRadio("FSMD",10,20)
    $fsmdfpaapar=GUICtrlCreateRadio("FSMD + FPAA",80,20)
    $fsmepar=GUICtrlCreateRadio("FSME",190,20)
    GUICtrlSetState($fsmdpar, $GUI_CHECKED)
    GUICtrlCreateGroup("Auswahl",5,5,240,40)

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

    ;FSMD
    $fsmdcore=GUICtrlCreateLabel("FSMD Core:",10,60)
    $fsmdfpfb=GUICtrlCreateLabel("FSMD FPFB:",10,80)
    $fsmdfan=GUICtrlCreateLabel("FSMD FAN:",10,100)
    $fsmdfspc1=GUICtrlCreateLabel("FSMD FSPC:",10,120)
    $fsmdfspc2=GUICtrlCreateLabel("FSMD FSPC:",10,140)
    $fsmdcase=GUICtrlCreateLabel("FSMD Case:",10,160)
    $fsmdfska=GUICtrlCreateLabel("FSMD FSKA:",10,180)
    ;FPAA
    $fsmdfpaa=GUICtrlCreateLabel("FSMD FPAA:",10,200)
    ;FSME
    ;11 versch Inputs

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

    While 1
    $msg = GUIGetMsg()

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

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    GUIDelete()

    [/autoit]

    Macht es echt sinn das mit dieser Methode zu machen?
    Weil wenn ich dann von FSMD nach FSME gehe muss ich 7 Felder ausblenden und 11 Einblenden?
    Aber so wie ich das sehe gibt es keine Elegantere möglichkeit oder?

    Edit:
    Nicht nur 7 ausblenden und 11 einblenden sondern 14 ausblenden (wegen den noch folgenden Input Feldern) und 22 Einblenden...

    Gruß Black

    Kleiner AutoIt Lehrling :)

  • Du kannst das trotzdem schnell lösen: Pack die Label's in ein Array und regel das mit For-Schleifen:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    Local $msg

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

    GUICreate("Parcreator",270,350)
    $fsmdpar=GUICtrlCreateRadio("FSMD",10,20)
    $fsmdfpaapar=GUICtrlCreateRadio("FSMD + FPAA",80,20)
    $fsmepar=GUICtrlCreateRadio("FSME",190,20)
    GUICtrlSetState($fsmdpar, $GUI_CHECKED)
    GUICtrlCreateGroup("Auswahl",5,5,240,40)

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

    ;FSMD
    Dim $ahLabelsFSMD[7]
    $ahLabelsFSMD[0] = GUICtrlCreateLabel("FSMD Core:",10,60)
    $ahLabelsFSMD[1] = GUICtrlCreateLabel("FSMD FPFB:",10,80)
    $ahLabelsFSMD[2] = GUICtrlCreateLabel("FSMD FAN:",10,100)
    $ahLabelsFSMD[3] = GUICtrlCreateLabel("FSMD FSPC:",10,120)
    $ahLabelsFSMD[4] = GUICtrlCreateLabel("FSMD FSPC:",10,140)
    $ahLabelsFSMD[5] = GUICtrlCreateLabel("FSMD Case:",10,160)
    $ahLabelsFSMD[6] = GUICtrlCreateLabel("FSMD FSKA:",10,180)
    ;FPAA
    Dim $ahLabelsFPAA[1]
    $ahLabelsFPAA[0] = GUICtrlCreateLabel("FSMD FPAA:",10,200)
    ;FSME
    ;~ Hier sind noch keine Labels!
    ;11 versch Inputs
    GUISetState(@SW_SHOW)

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

    While 1
    $iMsg = GUIGetMsg()
    Switch $iMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $FsmdPar
    _FsmdMode()
    Case $Fsmdfpaapar
    _FpaaMode()
    Case $fsmepar
    _FsmeMode()
    EndSwitch

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

    WEnd

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

    Func _FsmdMode()
    For $i = 0 To UBound($ahLabelsFSMD) - 1
    GUICtrlSetState($ahLabelsFSMD[$i],$GUI_SHOW)
    Next
    For $i = 0 To UBound($ahLabelsFPAA) - 1
    GUICtrlSetState($ahLabelsFPAA[$i],$GUI_HIDE)
    Next
    EndFunc

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

    Func _FpaaMode()
    For $i = 0 To UBound($ahLabelsFSMD) - 1
    GUICtrlSetState($ahLabelsFSMD[$i],$GUI_HIDE)
    Next
    For $i = 0 To UBound($ahLabelsFPAA) - 1
    GUICtrlSetState($ahLabelsFPAA[$i],$GUI_SHOW)
    Next
    EndFunc

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

    Func _FsmeMode()
    For $i = 0 To UBound($ahLabelsFSMD) - 1
    GUICtrlSetState($ahLabelsFSMD[$i],$GUI_HIDE)
    Next
    For $i = 0 To UBound($ahLabelsFPAA) - 1
    GUICtrlSetState($ahLabelsFPAA[$i],$GUI_HIDE)
    Next
    EndFunc

    [/autoit]

    Ist beliebig erweiterbar.
    Wenn du die dritte Gruppe auch noch nutzen willst (FSME) musst du halt die Funktionen um eine For-Schleife erweitern.

    lg chess

    Edit: Spoiler vergessen.:S

  • Hier ein Beispiel! :thumbup:

    [autoit]


    GUICreate("Parcreator", 270, 480)
    GUICtrlCreateGroup("Auswahl", 5, 5, 240, 40)
    $fsmdpar = GUICtrlCreateRadio("FSMD", 10, 20)
    GUICtrlSetState(-1, 1)
    $fsmdfpaapar = GUICtrlCreateRadio("FSMD + FPAA", 80, 20)
    $fsmepar = GUICtrlCreateRadio("FSME", 190, 20)
    GUICtrlCreateGroup("", -99, -99, 1, 1) ;close group

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

    ;FSMD
    Dim $ahLabelsFSMD[20]
    For $i = 0 To 19 ;i statisch kein Ubound
    $ahLabelsFSMD[$i] = GUICtrlCreateLabel('FSMD ' & $i + 1, 10, 60 + $i * 20) ;i erstellt 20 Label
    Next

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

    ;FPAA

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

    ;FSME

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

    GUISetState(@SW_SHOW)

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

    While 1
    $Msg = GUIGetMsg()
    Switch $Msg
    Case -3
    ExitLoop
    Case $fsmdpar
    _FsmdMode()
    Case $fsmdfpaapar
    _FpaaMode()
    Case $fsmepar
    _FsmeMode()
    EndSwitch
    WEnd

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

    Func _FsmdMode()
    For $i = 0 To 19
    GUICtrlSetData($ahLabelsFSMD[$i], 'FSMD ' & $i + 1)
    Next
    EndFunc ;==>_FsmdMode

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

    Func _FpaaMode()
    For $i = 0 To 19
    GUICtrlSetData($ahLabelsFSMD[$i], 'FPAA ' & $i + 1)
    Next
    EndFunc ;==>_FpaaMode

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

    Func _FsmeMode()
    For $i = 0 To 19
    GUICtrlSetData($ahLabelsFSMD[$i], 'FSME ' & $i + 1)
    Next
    EndFunc ;==>_FsmeMode
    ; Ende

    [/autoit]