我有一个.NET 3.5 WinForm具有一个ListView与在详细模式下设置的视图。它用作长期后台任务中状态项目的可滚动列表。我最近添加了最近的ListViewItem(状态条目)。为了确保可以看到,我确保在添加后新项目的可见性。这一切都很好;列表视图会自动滚动到底部以显示最近的项目。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);
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();
}
}
什么奇怪的是,当用户按下到位滚动条“手柄”,手柄不动(这意味着该视图实际上没有被滚下来编程),但在事实上是。
更新:是否有可能检测到滚动条的位置,即如果我在底部或不是?
不知道为什么这是-1'd。虽然这并没有回答这个问题,但你提供了一个非常合理的替代方案 –
@Stealth - 一些马鞋系统地降低了我的答案。不知道为什么,不要担心。感谢您的投票。 –
这里的两个答案看起来都是正确的,但我最终会和你的建议一致,因为我认为它满足用户需求的更多,并且对它的功能不会感到惊讶。按照您的建议,我使用了处理器监视器,并且它对UX用户体验非常有用。 –