Listbox capricciosa

Salve a tutti,
ho una listbox con entrambe le scrollbar abilitate, verticale e orizzontale.
Le sue colonne vengono aggiunte e dimensionate in base a dati decisi dall’utente e salvati in un database.

A seconda del numero delle colonne e della loro ampiezza spesso esse occupano più spazio di quanto sia larga la listbox, e quindi mi aspetterei che la scrollbar orizzontare permettesse di scorrere oltre la larghezza della listbox.
La scrollbar orizzontale però risulta sempre disabilitata e non riesco a capire da cosa questo dipenda. Le colonne inoltre sembrano adattarsi proporzionalmente rientrando tutte nella larghezza complessiva della listbox anche se diventano illeggibili.

Le colonne vengono aggiunte e dimensionate non dall’evento Open ma da un metodo che ridisegna la listbox ogni volta che l’utente modifica le preferenze nel database.

Qualche idea su quale sia il motivo di questa “anomalia”?

Non dici come hai corretto la larghezza delle colonne…

Se hai utilizzato qualcosa di diverso dai valori fissi (120, 110, 250.200) la barra di scorrimento orizzontale non verrà mai visualizzata.

Quindi, rimuovi * e l’altra % nella definizione della larghezza delle colonne…

I valori sono fissi e vengono dichiarati colonna per colonna in base ad una condizione.
Una cosa del tipo:

ListBox.HasHeader = True
ListBox.ColumnCount = 32
ListBox.HasHorizontalScrollbar = True

If CONDIZIONE then
 ListBox.ColumnAttributesAt(0).WidthActual = 50
 ListBox.ColumnAttributesAt(1).WidthActual = 40
 ListBox.ColumnAttributesAt(2).WidthActual = 60
 .........
Else

 ListBox.ColumnAttributesAt(0).WidthActual = 100
 ListBox.ColumnAttributesAt(1).WidthActual = 80
 ListBox.ColumnAttributesAt(2).WidthActual = 120
 ........
End If

Ho la necessità di dichiarare colonna par colonna perchè alcune di esse potrebbero non essere necessarie, a seconda delle preferenze immesse dall’utente.
Nulla di strano mi sembra, eppure la scrollbar non si attiva.

Tutte le larghezze delle colonne devono essere espresse in pixel (10, 20, 100) senza utilizzare * o %.

Per verificarlo, crea un nuovo progetto, aggiungi un DesktopListBox, imposta la larghezza totale delle colonne (in pixel) su un valore superiore alla larghezza del DesktopListBox (e non dimenticare di aggiungere una ScrollBar Horizontal).

Corri e guarda come funziona.

A proposito: devi inserire i valori dei pixel nella proprietà Larghezza (in pixel).

Ecco come funziona DesktopListBox.

Language Reference:
HasHorizontalScrollbar As Boolean

If True, adds a horizontal scrollbar to the DesktopListBox.

The horizontal scrollbar only appears if the sum of the widths of the columns exceeds the width of the ListBox itself. If the widths of the columns is less than (or matches) the width of the DesktopListBox, then no horizontal scrollbar appears.

Made a lod of changes and fix in the code and finally I get the orizontal scrollbar working.

Marco - ben fatto!

Following my advice would takes a mibute or two to verify / implement…

A click in the Pen
image

Display the Window to set the Columns width allows you to set them; use a number of pixels as shown below and your Horizontal ScrollBar appears if the total width of columns is > than the ListBox width…