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.
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
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
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..
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
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")
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")
Bei 6 nur noch
[autoit]GUICtrlSetData($Cbo_Client_Tunnel,"Bitte Tunnel auswählen")
[/autoit]Wie mach ich das schöner...
Gruß Dietmar