Ridimensionare la larghezza della finestra a cascata di un ComboBox in base alla lunghezza testuale di un elemento

Da Gambas-it.org - Wikipedia.

Per ridimensionare la larghezza della finestra a cascata di un ComboBox in base alla lunghezza testuale di un elemento, bisogna tenere conto di come è formato attualmente detto Oggetto grafico.

Attualmente il ComboBox in Gambas è formato da almeno due Oggetti grafici, verificabili agevolmente invocando la sua Proprietà ".Children":

Public Sub Form_Open()

 Dim ob As Object
 
 For Each ob In ComboBox1.Children
   Print Object.Type(ob)
 Next

End

Come si potrà notare, i due Oggetti - "Figli" del ComboBox - sono un Panel e TextBox. [Nota 1]

...... ......

Mostriamo un esempio pratico:

Private Const LUNGCB As Byte = 60


Public Sub Form_Open()

 Dim pn As Panel
 Dim obs As Observer

 ComboBox1.W = LUNGCB
 ComboBox1.List = ["àèéìòù", "1234567890", "bbGTfddr", "abcde"]
 pn = ComboBox1.Children[0]

 obs = New Observer(pn) As "Panel1"

End

Public Sub Panel1_MouseDown()

 Dim c As Short

 c = Individua()
 
 ComboBox1.W = ComboBox1.Font.TextWidth(ComboBox1.List[c]) + 
               (ComboBox1.Font.TextWidth(ComboBox1.List[c]) / ComboBox1.List[c].Len)
 
End

Private Function Individua() As Short
 
 Dim s As String
 Dim cc As New Short[]
 Dim c As Short

 For Each s In ComboBox1.List
' Assegna il valore di ciascuna quantità di caratteri:
   cc.Push(String.Len(s))
 Next
' Ordina in modo "discendente" i valori presenti nel vettore di tipo "Short":
 cc.Sort(gb.Descent)

 For c = 0 To cc.Max
' Individua l'indice dell'elemento contenente la quantità di caratteri maggiore:
   If cc[0] == String.Len(ComboBox1.List[c]) Then Break  
 Next
 
 Return c
 
End

Public Sub Panel1_MouseUp()
 
' Ripristina in chiusura della finestra del "ComboBox" la dimensione originaria di tale Oggetto grafico:
 ComboBox1.W = LUNGCB
 ComboBox1.Pos = 0
 
End

Public Sub ComboBox1_Click()  

 ComboBox1.W = LUNGCB
 ComboBox1.Pos = 0
 
End


Note

[1] Va precisato che l'Oggetto ComboBox possiede due "Figli" Oggetti grafici, se la sua Proprietà ".ReadOnly" è lasciata al suo valore predefinito ovvero impostata a "FALSE". Qualora tale Proprietà sia impostata a "True", allora il ComboBox è costituito da un solo "Figlio": il Panel.


PAGINA IN COSTRUZIONE !