2012-01-09 17 views
45

Używam pola listy WinForm jako małej listy zdarzeń i chcę go wypełnić, aby było widoczne ostatnie zdarzenie (u dołu). SelectionMode jest ustawiony na brak. Użytkownik może przewijać listę, ale wolałbym, aby była przewijana do końca.Jak przewinąć do dołu ListBox?

Patrząc na brak wsparcia dla rzeczy takich jak ScrollIntoView, EnsureVisible, zakładam, że będę musiał utworzyć niestandardową kontrolę, która dziedziczy z ListBox; jednak nie jestem pewien, co robić dalej.

Kilka wskazówek?

+2

Czy normalne 'listBox1.SelectedIndex = listBox1.Items.Count - 1;' nie działa dla ciebie? –

+1

Działa to, gdy 'SelectionMode' nie jest ustawiony na' Brak'. Muszę uniemożliwić wybór elementów z tej listy (aby uniknąć nieporozumień użytkownika). – JYelton

Odpowiedz

75

Wierzę, że można to łatwo zrobić, odpowiednio ustawiając właściwość TopIndex.

Na przykład:

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

+1 Nieco zawikłany, ale to z pewnością nie twoja wina! Dzięki za rozwiązanie i przykład. – JYelton

+29

Wygląda na to, że działa dobrze, jeśli po prostu ustawisz "TopIndex" na ostatni element, zamiast martwić się, który naprawdę powinien być na górze, np. 'listBox.TopIndex = listBox.Items.Count - 1;' –

28

Przewiń do dołu:

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

Przewiń w dół i wybierz ostatni element:

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

Nie ma potrzeby wykonywania skomplikowanych obliczeń, ListBox koryguje niewłaściwe dane wejściowe.

+0

Preferuję to rozwiązanie, o wiele prostsze. Dzięki! –

+0

Najlepsze rozwiązanie., –

Powiązane problemy