2012-01-09 116 views
45

我正在使用Winforms ListBox作为事件的小列表,并且想要填充它以便可以看到最后一个事件(底部)。 SelectionMode设置为无。用户可以滚动列表,但我更喜欢它开始滚动到最后。如何滚动到ListBox的底部?

看着缺少支持像ScrollIntoView,EnsureVisible这样的东西,我假设我需要创建一个自ListBox继承的自定义控件;但是我不知道该从哪里做些什么。

有些指针?

+2

没有正常的'listBox1.SelectedIndex = listBox1.Items.Count - 1;'不适合你吗? – 2012-01-09 23:42:25

+1

'SelectionMode'没有设置为'None'时有效。我需要防止在此特定列表中选择项目(以避免用户混淆)。 – JYelton 2012-01-09 23:44:34

回答

75

我相信你可以很容易地通过适当地设置TopIndex属性。

例如:

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

+1有点复杂,但那绝对不是你的错!感谢解决方案和示例。 – JYelton 2012-01-10 00:05:02

+29

如果您只是将TopIndex设置为最后一项,而不是担心哪一项应该位于最上方,它似乎可以正常工作。 'listBox.TopIndex = listBox.Items.Count - 1;' – 2013-11-08 04:13:33

28

滚动至底部:

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

滚动至底部,并选择最后一项:

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

不需要在这里做复杂的计算,ListBox为您纠正不正确的输入。

+0

我更喜欢这个解决方案,简单得多。谢谢! – 2017-03-22 13:59:34

+0

最佳解决方案。, – 2017-07-28 18:56:15