我有一個.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用戶體驗非常有用。 –