Scriptoptimierung komme aber nicht auf die Lösung Case / ContinueCase

  • Hallo im aktuellen Programm wo ich mich geradae austobe, gibt es eine Funktion welche ich so nicht wirklich "schön finde".
    Evtl. hat ja jemand eine bessere Lösung parat.

    [autoit]

    Func _Refill_Detail_Infos($s_ini_section) ; Aktualisieren der Infos nach Wechsel der Auswahl
    $a_Client = IniReadSection($f_Wol_Ini,GUICtrlRead($s_ini_section))
    Switch $s_ini_section
    Case $Cbo_Client_MC
    For $i_cnt_a = 1 to $a_Client[0][0]
    Switch $i_cnt_a
    Case 1
    GUICtrlSetData($Inp_Client_Host,$a_Client[1][1])
    Case 2
    GUICtrlSetData($Inp_Client_Mac,$a_Client[2][1])
    Case 3
    _GUICtrlIpAddress_Set($Inp_Client_IP,$a_Client[3][1])
    Case 4
    _GUICtrlIpAddress_Set($Inp_Client_BC,$a_Client[4][1])
    If $a_Client[0][0] = 4 Then
    GUICtrlSetData($Cbo_Client_OS,"Bitte OS auswählen")
    GUICtrlSetData($Cbo_Client_Router,"Bitte Router auswählen")
    GUICtrlSetData($Cbo_Client_Tunnel,"Bitte Tunnel auswählen")
    GUICtrlSetData($Inp_Client_User,"")
    EndIf
    Case 5
    _Replace_Detail_Infos($a_Client[5][1],"Bitte OS auswählen",$Cbo_Client_OS)
    If $a_Client[0][0] = 5 Then
    GUICtrlSetData($Cbo_Client_Router,"Bitte Router auswählen")
    GUICtrlSetData($Cbo_Client_Tunnel,"Bitte Tunnel auswählen")
    GUICtrlSetData($Inp_Client_User,"")
    EndIf
    Case 6
    _Replace_Detail_Infos($a_Client[6][1],"Bitte Router auswählen",$Cbo_Client_Router)
    If $a_Client[0][0] = 6 Then
    GUICtrlSetData($Cbo_Client_Tunnel,"Bitte Tunnel auswählen")
    GUICtrlSetData($Inp_Client_User,"")
    EndIf
    Case 7
    _Replace_Detail_Infos($a_Client[7][1],"Bitte Tunnel auswählen",$Cbo_Client_Tunnel)
    GUICtrlSetData($Inp_Client_User,"")
    Case 8
    _Replace_Detail_Infos($a_Client[8][1],"",$Inp_Client_User)
    EndSwitch
    Next
    Case $Cbo_Router_MC

    [/autoit]

    Hier ein Auszug aus der Funktion, doof finde ich die IF-Schleife ab Case 4.
    Hintergrund ist folgender, im ursprünglichen Script gab es 4 Einträge, die vom User gespeichert wwerden konnten.
    Nun sind noch ein paar Komboboxen hinzugekommen.
    Die Funktion dient dem Aktualisieren aller Felder auf der Seite in Abhängkeit des ausgewählten Matchcodes.

    Nun zum Problem:
    Wenn ich die Anzahl der Elemente nicht prüfe und zum Beispiel

    [autoit]

    GUICtrlSetData($Inp_Client_Host,$a_Client[1][1])

    [/autoit]

    auf ein nicht vorhandenes
    Arrayelement loslasse gibt es einen bösen Fehler und Script ist am Ende. :(
    Mit dem Schleifendurchlauf habe ich das Problem entschärft, allerdings würde mir eine leere Antwort die Combobox zerlegen.
    Dafür habe ich diese Unterfunktion reingebastelt..

    [autoit]

    Func _Replace_Detail_Infos($s_tmp_inivalue,$s_tmp_mesg,$s_tmp_control) ; Ersetzt nicht vorhandene Einträge mit Dummys
    If $s_tmp_inivalue = "" Then
    GUICtrlSetData($s_tmp_control,$s_tmp_mesg)
    Else
    GUICtrlSetData($s_tmp_control,$s_tmp_inivalue)
    EndIf
    EndFunc

    [/autoit]


    Dadurch wird der übergebene Ersatztext anstelle von "NULL" gesetzt. Funktioniert auch so weit prima. Finde aber diese Doppler hässlich.

    Also wenn nur 4 Einträge vorhanden sind ändere diese Comboboxen wie folgt...

    [autoit]

    GUICtrlSetData($Cbo_Client_OS,"Bitte OS auswählen")
    GUICtrlSetData($Cbo_Client_Router,"Bitte Router auswählen")
    GUICtrlSetData($Cbo_Client_Tunnel,"Bitte Tunnel auswählen")

    [/autoit]

    Wenn nur 5 vorhanden sind müssen nur noch diese ergänzt werden

    [autoit]

    GUICtrlSetData($Cbo_Client_Router,"Bitte Router auswählen")
    GUICtrlSetData($Cbo_Client_Tunnel,"Bitte Tunnel auswählen")

    [/autoit]

    Bei 6 nur noch

    [autoit]

    GUICtrlSetData($Cbo_Client_Tunnel,"Bitte Tunnel auswählen")

    [/autoit]


    Wie mach ich das schöner... ?(

    Gruß Dietmar

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Vielleicht von oben runter?

    ca. nach dem Schema:

    Spoiler anzeigen
    [autoit]


    For $i_cnt_a=$a_Client[0][0] to 1 step -1
    switch $i_cnt_a
    case 8
    GUICtrlSetData($Inp_Client_Host,$a_Client[1][1]) ; case 1
    GUICtrlSetData($Inp_Client_Mac,$a_Client[2][1]) ; case 2

    ; usw.
    ; ..
    ;...


    _Replace_Detail_Infos($a_Client[8][1],"",$Inp_Client_User) ; case 8

    ExitLoop
    case 7
    GUICtrlSetData($Inp_Client_Host,$a_Client[1][1]) ; case 1
    GUICtrlSetData($Inp_Client_Mac,$a_Client[2][1]) ; case 2

    ; usw.
    ; ..
    ;...
    _Replace_Detail_Infos($a_Client[7][1],"Bitte Tunnel auswählen",$Cbo_Client_Tunnel) ; case 7
    GUICtrlSetData($Inp_Client_User,"") ; case 7
    ExitLoop

    case 6
    ; ....
    ; ....
    ; ....


    EndSwitch
    next

    [/autoit]

    So müssen die control je nach $a_Client[0][0] auch nicht x-mal geändert werden.