Ridimensionare la larghezza della finestra a cascata di un ComboBox in base alla lunghezza testuale di un elemento della lista
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 !