簡體   English   中英

導致自動滾動的列表框RemoveAt方法

[英]Listbox RemoveAt Method Causing AutoScroll

果殼:當我調用RemoveAt(0)時,如何禁用自動滾動回到列表框的頂部?

背景:
我有一個簡單的列表框,可以定期填充全部數據。

基本上,我使用的是狀態報告工具。

我的程序的每次迭代都會導致將大約100行數據拋出到列表框中,而轉儲大量信息的最佳方法是始終將其添加到底部。

我希望最新的結果在底部,而最舊的結果則在“向上推”。 因為此列表框的大小在短時間后變得很大,所以將大小限制為1000個項目。

當包裝盒中的物品超過1000個時,我將使用RemoveAt(0)直到再次獲得1000個物品。

為了始終顯示最相關的信息,我將列表框一直向下滾動。 這樣做的問題是,每當我調用RemoveAt(0)時,該框都會自動滾動回到新項目0。基本上,每次我將項目添加到“完整”列表框中時,效果都是快速向上滾動1000項,然后再放下1000項,使顯示笨拙。

調用RemoveAt(0)時如何禁用自動滾動回到列表框的頂部?

僅當沒有選定的項目時,才會發生這種情況。 或者換句話說,ListBox.SelectedIndex = -1。 簡單的解決方法是選擇一個項目。 像最后一個一樣。

我不能回答你的問題。 即使我了解這項技術,我也可能找不到滿足您需求的答案。 問題的一部分是您要的是“以解決問題的方式幫助我解決問題”,而不是“這是業務問題,什么是最佳解決方案”。

我的建議:回到核心問題,聽起來像是“我需要一種方法來用新事件更新'列表',同時將列表保持在1000個以下”。 由此,您將有一個列表框的解決方案附加到底部,並從頂部清除作為解決方案。 而且,我不確定如何在解決方案中關閉滾動功能,但是我不確定這是解決業務問題的唯一方法。

分解后,有幾個問題要回答:

  1. 如何綁定/更新數據?
  2. 更改綁定的項目數時,如何防止控件滾動到新位置?

至於綁定,無論您是從底部和修剪頂部添加還是從頂部和修剪底部添加,程序性添加都是一種選擇。 另一個是組裝數據並重新綁定。 我會想象還有其他人。

滾動問題實際上不是滾動問題,而是“記住我在看什么”問題或“始終顯示最新”問題。 如果始終顯示最新,則需要找出一種方法來確保添加或刪除某些內容時處於末尾。 如果用戶可以更改位置,則需要一種存儲其所在位置並返回該位置的方法。 您增加了一些復雜性,因為列表的長度可能在1到1000個項目之間,所以滾動位置(總是在底部)是很麻煩的,除非您按百分比工作。 無論關閉滾動是否解決了緊迫的問題,如果有記住用戶位置的業務要求,在更新數據后都應執行檢查步驟。

作為最后的建議,請看其他人如何解決顯示流數據的問題。 遵循眾所周知的模式是一個好主意,因為它為用戶提供了熟悉的界面。 通常,對於流數據,流只有很少的幾行(足以填滿一個屏幕,而不是1000行),但是如果需要,您可以返回並查看以前的“記錄的”事件。 再一次,我不確定您的解決方案是否需要流式解決方案,但是您仍然應該回到核心業務問題並從那里開始。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM