Winforms:当存在垂直滚动条时,如何以编程方式显示C#listview中的最后一项?
当存在垂直滚动条时,如何以编程方式显示C#listview中的最后一项?我已经研究了与ListView相关的所有方法,但找不到任何方法。WPF还是WinForms 在WPF中,您将获得Winforms:当存在垂直滚动条时,如何以编程方式显示C#listview中的最后一项?,c#,winforms,listview,scrollbar,C#,Winforms,Listview,Scrollbar,当存在垂直滚动条时,如何以编程方式显示C#listview中的最后一项?我已经研究了与ListView相关的所有方法,但找不到任何方法。WPF还是WinForms 在WPF中,您将获得ListViewItem,并在其上调用BringIntoView。WINFORMS: 是否尝试在ListView的Items集合的最后一项中将所选值设置为TRUE 我认为这样做将集中于最后一项。。。必要时向下滚动。 但我没有试过自己 编辑: 这就可以了: Me.ListView1.Items(Me.ListView
ListViewItem
,并在其上调用BringIntoView
。WINFORMS:
是否尝试在ListView的Items集合的最后一项中将所选值设置为TRUE
我认为这样做将集中于最后一项。。。必要时向下滚动。
但我没有试过自己
编辑:
这就可以了:
Me.ListView1.Items(Me.ListView1.Items.Count - 1).EnsureVisible()
ListViewItem.EnsureRevible()滚动列表视图实际上并不容易/可能。您需要告诉项目以确保其可见
var items = listView.Items;
var last = items[items.Count-1];
last.EnsureVisible();
这是一个链接,指向使用windows功能隐藏要始终显示的水平面和强制垂直面:
下面的hack将选择并显示最后一个ListView项目。
不知道为什么这样做有效,但它有效
listview.SelectedIndices.Clear();
listview.FocusedItem = listview.Items[listview.Items.Count - 1];
listview.FocusedItem.Selected = true;
listview.BeginInvoke((MethodInvoker)delegate {
listview.FocusedItem.EnsureVisible();
});
另外,如果您不想显示水平滚动条,在调用
BeginInvoke
之前,您需要调整ListView列的大小以适应ListView的ClientArea
宽度。我有一个自定义控件继承ListView,但由于它不公开内部ListView,所以我无法使用上述项…EnsureRevible()
解决方案
我通过将Ctrl+End键直接发送到该控件来手动修复滚动至底部,从而解决了这一问题:
logMsgList.Focus();
SendKeys.Send("^{END}");
它设置了焦点,但没有自动滚动。还有其他想法吗?这段代码可以工作,但在我的CE设备上会显示一个水平条并将其隐藏(由于大小有限)。有没有办法放大水平滚动条?你需要考虑垂直滚动条的宽度。列不应使用ListView的所有宽度。。。为垂直滚动条节省一点时间。
logMsgList.Focus();
SendKeys.Send("^{END}");