Un pelin complejo pero nada del otro mundo.
Este ejemplo es tomado del codigo del Maestro Rene Flores:
aCombo1 := {"Ventas","Compras","Cuentas por Pagar","Cuentas por Cobrar"}
aCombo2[1] := {"Nacionales", "Internacionales","Gubernamentales","Otras"}
aCombo2[2] := {"Nacionales","Internacionales"}
aCombo2[3] := {"Por compras","Por consignación"}
aCombo2[4] := {"15 dias","30 dias", "45 dias","Incobrables }
nCombo1 := 1
nCombo2 := 1
REDEFINE COMBOBOX oCombo1;
VAR nCombo1;
ITEMS aCombo1 ID 101 OF oDlg;
ON CHANGE (nCombo2 := 1,
oCombo2:SetArray(aCombo2[nCombo1],;
oCombo2:Refresh()) UPDATE
REDEFINE COMBOBOX oCombo2;
VAR nCombo2:
ITEMS aCombo2[1] ID 102 OF oDlg UPDATE
Listo, la mecanica es simple, cuando cambia oCombo1, es decir cada vez que seleccionas un item del primer combo, el evento OnChange de este hace lo siguiente:
setea la variable del segundo combo a 1, para que apunte al primer elemento del array, luego, usando el metodo ::SetArray() de la clase combo, cambia el array a desplegar en oCombo2, usando para esto el valor actual de "nCombo1", por ejemplo si te mueves al segundo elemento del combo1, el valor de nCombo1 es igual a 2, por lo tanto el array que se utilizara en el Combo2 sera aCombo2[2], como te haz movido en el combo1, se ha disparado el evento ONCHANGE de este, y entoces se establecen los nuevos valores del combo2 y luego simplmente un ::Refresh() re pinta el combo 2.