c# – ListView滚动控件 – 如果用户不滚动,滚动到底部?

我有一个.NET 3.5 WinForm,它有一个ListView,在View模式下设置了View.它在长时间背景任务中充当状态项的可滚动列表.我将最新的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();
    }
}

奇怪的是,当用户按住滚动条“句柄”时,句柄不会移动(暗示视图实际上不是以编程方式向下滚动),而是实际上是.

更新:是否可以检测滚动条的位置,即,是否在底部?

解决方法:

与SysInternals的ProcMon相比.添加一个标有“自动滚动”的复选框,以便用户可以将其关闭.

上一篇:chrome滚动条颜色尺寸设置


下一篇:c# – 滚动条到达面板底部时的触发事件