【发布时间】:2011-11-28 15:25:00
【问题描述】:
我有一个 .NET 3.5 WinForm,它有一个 ListView,其 View 设置为 Details 模式。它用作长后台任务的状态项的可滚动列表。我在底部添加了最新的 ListViewItem(状态条目)。为了确保它被看到,我确保添加后新项目的可见性。这一切都很好;列表视图会自动滚动到底部以显示最近的项目。
private void AddListItem(DateTime timestamp, string message, int index)
{
var listItem = new ListViewItem(timestamp.ToString());
listItem.SubItems.Add(message);
statusList.Items.Insert(index, listItem);
statusList.Items[statusList.Items.Count - 1].EnsureVisible();
}
问题是如果用户向上滚动查看旧消息,ListView 将向下滚动以使新项目在进入时可见。有没有办法控制这种行为来检查用户是否正在交互使用滚动条(特别是,如果他们按住滚动条上的鼠标按钮)?如果滚动总是在底部,检测也可能是可以接受的。如果它不在底部,那么我将无法确保最新项目的可见性。比如:
private void AddListItem(DateTime timestamp, string message, int index)
{
var listItem = new ListViewItem(timestamp.ToString());
listItem.SubItems.Add(message);
statusList.Items.Insert(index, listItem);
if (!statusList.IsScrollbarUserControlled)
{
statusList.Items[statusList.Items.Count - 1].EnsureVisible();
}
}
奇怪的是,当用户按住滚动条“手柄”时,手柄并没有移动(这意味着视图实际上并没有以编程方式向下滚动),但实际上是。
更新:是否可以检测滚动条的位置,即是否在底部?
【问题讨论】:
标签: c# .net winforms scrollbar