2012-01-09 2 views
45

Я использую Winforms ListBox как небольшой список событий и хочу заполнить его так, чтобы было видно последнее событие (внизу). Значение SelectionMode равно none. Пользователь может прокручивать список, но я бы предпочел, чтобы он начинался с прокрутки до конца.Как прокрутить список до ListBox?

Рассматривая отсутствие поддержки таких вещей, как ScrollIntoView, EnsureVisible, я предполагаю, что мне нужно создать настраиваемый элемент управления, который наследуется от ListBox; однако я не уверен, что делать дальше.

Некоторые указатели?

+2

Был ли нормальный 'listBox1.SelectedIndex = listBox1.Items.Count - 1;' не работает для вас? –

+1

Это работает, когда 'SelectionMode' не установлен в' None'. Мне нужно предотвратить выбор элементов в этом конкретном списке (чтобы избежать путаницы пользователей). – JYelton

ответ

75

Я считаю, что вы можете сделать это легко, установив надлежащим образом свойство TopIndex.

Например:

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

+1 Немного запутанный, но это, безусловно, не ваша вина! Спасибо за решение и пример. – JYelton

+29

Кажется, что это нормально, если вы просто установите 'TopIndex' в последний элемент вместо того, чтобы беспокоиться о том, что должно действительно быть наверху, например. 'listBox.TopIndex = listBox.Items.Count - 1;' –

28

Scroll до дна:

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

Прокрутите вниз и выберите последний пункт:

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

Нет необходимости выполнять сложные вычисления здесь, ListBox исправляет неправильный ввод для вас.

+0

Я предпочитаю это решение намного проще. Благодаря! –

+0

Лучшее решение., –

Смежные вопросы