Avrei risolto in questo modo:
Dichiarazione di due variabili object, fra quelle della Form di pertinenza, per indirizzarle alle ComboBox.Group:
PRIVATE o_ElCmbVoCo AS NEW Object[] 'permette il puntamento agli elementi del gruppo di oggetti ComboVociCont presenti nel Form
PRIVATE o_CmbVociCont AS Object
Scrittura di una routine di puntamento dei nuovi oggetti alle ComboBox.Group:
PUBLIC SUB CarPuntVociCo() 'Procedura di caricamento della Tabella dei puntamenti ad alcune ComboBox della Form
o_ElCmbVoCo.Add(ME.VoContCas)
o_ElCmbVoCo.Add(ME.VoSotCtoCas)
o_ElCmbVoCo.Add(ME.VoCoPriColleg)
o_ElCmbVoCo.Add(ME.VoCoSecColleg)
o_ElCmbVoCo.Add(ME.VoSotCtoColleg)
END
Richiamo della routine appena descritta dentro il metodo new_ della Form:
PUBLIC SUB _new()
'--------------- bla bla bla --------------------
CarPuntVociCo
'--------------- bla bla bla --------------------
END
Tutti gli oggetti diversi da ComboBox.Group richiamano la ComboBoxGroup_LostFocus per assicurarne l'esecuzione:
[code]PUBLIC SUB SetCoVoce_Click()
'--------------- bla bla bla --------------------
CmbVociCont_LostFocus
'--------------- bla bla bla --------------------
END[/code]
La procedura
CmbVociCont_LostFocus fa riferimento alle proprietà delle ComboBox.Group, non più direttamente, ma indirettamente, tramite gli oggetti di puntamento
o_CmbVociCont,
o_ElCmbVoCo :
PUBLIC SUB CmbVociCont_LostFocus()
'--------------- bla bla bla --------------------
FOR EACH o_CmbVociCont IN o_ElCmbVoCo
i += 1
IF o_CmbVociCont.tag = $_UltCmbVoCo
i_IndComBox = i
IF o_CmbVociCont.text <> ""
IF $_NuoVoxCto <> ""
IF o_CmbVociCont.text <> $_NuoVoxCto THEN
FOR i = 0 TO o_CmbVociCont.count - 1
IF o_CmbVociCont.List[i_IndComBox - 1] = $_NuoVoxCto THEN
$_NuoVoxCto = o_CmbVociCont.text 'prepara il caricamento della nuova voce digitata
o_CmbVociCont.Remove(i_IndComBox - 1) 'l'istruzione remove altera anche il contenuto della CombBox.Text
o_CmbVociCont.text = $_NuoVoxCto 'restituisce alla CombBox.Text la nuova digitazione
ENDIF
NEXT
o_CmbVociCont.Add(o_CmbVociCont.text)
ENDIF
ELSE
$_NuoVoxCto = o_CmbVociCont.text
o_CmbVociCont.Add(o_CmbVociCont.text)
o_CmbVociCont.text = $_NuoVoxCto 'restituisce alla CombBox.Text la nuova digitazione
ENDIF
ELSE
IF $_NuoVoxCto <> "" THEN
FOR i = 0 TO o_CmbVociCont.count - 1
IF o_CmbVociCont.List[i_IndComBox] = $_NuoVoxCto THEN
o_CmbVociCont.Remove(i_IndComBox) 'l'istruzione remove altera anche il contenuto della CombBox.Text
ENDIF
NEXT
ENDIF
ENDIF
ENDIF
NEXT
'--------------- bla bla bla --------------------
END
In mancanza di altre soluzioni, l'ho provata e funziona. Certamente, gli amanti del rigore strutturale di Gambas non approveranno, ma le mie conoscenze non mi permettono di fare altro.
Saluti.