当有垂直滚动条时,如何以编程方式显示 C# 列表视图中的最后一项?我研究了与列表视图相关的所有方法,但找不到任何东西。
8 回答
滚动列表视图实际上并不容易/不可能。您需要告诉该项目以确保它是可见的。
var items = listView.Items;
var last = items[items.Count-1];
last.EnsureVisible();
this.listView1.Items[this.listView1.Items.Count - 1].EnsureVisible();
WINFORMS:
您是否尝试在 ListView 的 Items 集合的最后一项中将 Selected 值设置为 TRUE?
我认为这样做将专注于最后一项......如果需要,向下滚动。但我自己没有试过。
编辑: 这可以解决问题:
Me.ListView1.Items(Me.ListView1.Items.Count - 1).EnsureVisible()
ListViewItem.EnsureVisible()
WPF 还是 WinForms?
在 WPF 中,您会得到ListViewItem
并调用BringIntoView
它。
这是一个使用 windows 功能隐藏水平和强制垂直显示的链接:
http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/4aa4dade-53a2-4e2e-a8b4-b4980da1f39c/
以下 hack 将选择并显示最后一个 ListView 项。
不知道为什么这有效,但它有效。
listview.SelectedIndices.Clear();
listview.FocusedItem = listview.Items[listview.Items.Count - 1];
listview.FocusedItem.Selected = true;
listview.BeginInvoke((MethodInvoker)delegate {
listview.FocusedItem.EnsureVisible();
});
此外,如果您不希望显示水平滚动条,则需要ClientArea
在调用之前调整 ListView 列的大小以适合 ListView 的宽度BeginInvoke
。
我有一个继承 ListView 的自定义控件,但由于它不公开内部 ListView,我无法使用上述items...EnsureVisible()
解决方案。
Ctrl我通过将+End键直接发送到该控件以手动将滚动固定到底部来解决某种工作:
logMsgList.Focus();
SendKeys.Send("^{END}");