Ciao oregon.
Purtroppo non è un codice che ho scritto io ed è pure scritto in modo poco comprensibile; ciò che posso dirti è che per aggiungere gli item viene usato il metodo AddItem della combobox;
Nel software è previsto un array di combobox, quindi nel codice la combobox corrente è indicata dall'indice i:
codice:
NameConv(i).AddItem recappLocal.Fields("Descrizione").value
dove appunto NameConv(i) è la combobox e recappLocal è il recordset contenente i dati.
Mi sono creata una variabie array locale al form (Private cWidth() As Long) nella quale per ogni indice (combobox) memorizzo la lunghezza massima.
Questo è il codice nella sua interezza (le righe in rosso le ho aggiunte io):
codice:
Dim myA As Single
Dim myB As Single
myA = 0
myB = 0
With recTagTableLocal
ReDim cWidth(numNameConv)
For i = 0 To numNameConv
If IsNull(.Fields("Cod" & i).value) = True Then
CodiciN(i) = 0
Else
CodiciN(i) = .Fields("Cod" & i).value
End If
recappLocal.Open "select * from Tab" & Format(i, "0") & " where ID=" & CodiciN(i) & " and Action <> 'D'", ConfigurationDB, adOpenStatic, adLockOptimistic
If recappLocal.EOF = False Then 'sta caricando i dati nelle combobox
If IsNull(recappLocal.Fields("Descrizione").value) = True Then
NameConv(i).AddItem " "
myA = Len(" ")
Else
NameConv(i).AddItem recappLocal.Fields("Descrizione").value
myA = Len(recappLocal.Fields("Descrizione").value)
End If
If (CodiciN(i) <> 0) Then
NameConv(i).itemdata(NameConv(i).NewIndex) = CodiciN(i)
NameConv(i).ListIndex = 0
End If
If myA > myB Then
myB = myA
Else
myB = 100
End If
End If
cWidth(i) = myB
recappLocal.Close
Next i
End With
Ora, quando viene generato l'evento DropDown, nel codice relativo devo richiamare l'istruzione SendMessage ma la larghezza della tendina viene ridimensionata male, cioè è troppo larga; perciò forse devo fare una qualche conversione, ma non saprei proprio come fare.
Oppure semplicemente mi sono impappinata io da qualche parte nel codice.
Grazie per il tuo aiuto
lady