2012-01-09 11 views
45

Sto usando un ListBox Winforms come un piccolo elenco di eventi e voglio popolarlo in modo che l'ultimo evento (in basso) sia visibile. SelectionMode è impostato su none. L'utente può scorrere l'elenco ma preferire che inizi a scorrere fino alla fine.Come scorrere in fondo a ListBox?

Considerando la mancanza di supporto per cose come ScrollIntoView, EnsureVisible, suppongo che avrò bisogno di creare un controllo personalizzato che erediti da ListBox; tuttavia non sono sicuro di cosa fare da lì.

Alcuni indicatori?

+2

Il normale 'listBox1.SelectedIndex = listBox1.Items.Count - 1;' non funziona per te? –

+1

Che funziona quando 'SelectionMode' non è impostato su' Nessuno'. Devo evitare di selezionare elementi in questo elenco particolare (per evitare confusione dell'utente). – JYelton

risposta

75

Credo che si possa fare facilmente impostando la proprietà TopIndex in modo appropriato.

Ad esempio:

int visibleItems = listBox.ClientSize.Height/listBox.ItemHeight; 
listBox.TopIndex = Math.Max(listBox.Items.Count - visibleItems + 1, 0); 
+0

+1 Un po 'contorto, ma non è certamente colpa tua! Grazie per la soluzione e l'esempio. – JYelton

+29

Sembra funzionare bene se si imposta 'TopIndex' sull'ultimo elemento invece di preoccuparsi di quale dovrebbe essere effettivamente nella parte superiore, ad es. 'listBox.TopIndex = listBox.Items.Count - 1;' –

28

Scorrere fino alla fine:

listbox.TopIndex = listbox.Items.Count - 1;

Scorrere verso il basso e selezionare l'ultimo elemento:

listbox.SelectedIndex = listbox.Items.Count - 1;

Non c'è bisogno di fare calcoli complicati qui, ListBox corregge input improprio per voi.

+0

Preferisco questa soluzione, molto più semplice. Grazie! –

+0

La migliore soluzione., –

Problemi correlati