2009-02-23 23 views
3

我正在構建一個基於後綴樹的索引器應用程序,它使我能夠非常快速地索引整個文檔和搜索字符串,子字符串等。當有太多項目滾動時,Windows窗體列表框溢出

我在做什麼正在進入一個文本字符串,按下一個按鈕,運行查詢後綴樹,並添加字符串的所有出現的位置列表框的功能。所以列表框裏面有很多整數。

通常,這工作正常。例如,搜索「嚮導」,「甘道夫」或「霍比特人」(我將FOTR作爲測試索引:D)工作得很好,很花哨。不過,我現在正在用字母e來嘗試它。

問題是,字母e的位置確實列在列表框內。全部88974個。但是,當我通過拖動滾動條按鈕向下滾動時,當我在項目60000左右時,列表框會循環返回到頂部。問題變得更加奇怪,因爲我試過頁面向下滾動,一切正常。

我知道滾動通過88974(基於listbox.Items.Count)項目有點極端,但從邏輯上講,沒有理由爲什麼會有這樣的問題。

感謝您的閱讀!

編輯:給所有那些誰回答,謝謝你的回答。我終於用一個listview實現了它,並且它更快,並且可以很好地保存很多項目。謝謝!

回答

4

很可能ListBox仍然使用滾動條的16位範圍/位置消息。如果它是底層控制的問題,您可以嘗試在Win32中重現它。

您可能想嘗試列表視圖控件而不是列表框。我希望它不會遇到這個限制,它的虛擬模式也應該更有效率。

1

聽起來就像在16位(2^16 = 65536)點附近出現奇怪現象。我的猜測是,這是控制的滾動邏輯中的一個錯誤,導致該點附近出現呃逆。我想他們認爲沒有人會在列表框中放置超過65000個項目:)

6

這是一個Vista特定的錯誤。當你滾動過去65536+可見物品的數量時,它會變得焦躁不安。該錯誤在SP1中沒有得到解決。在XP中沒有問題。但是,是的,這是一個很少得到測試的錯誤。

+0

看起來像這樣的錯誤仍然與Windows 8.1中存在 – ThunderGr 2014-02-04 07:59:09

1

正如其他人所說,似乎您可能會遇到限制可以存儲在ListBox中的最大數量的項目。您可能最好使用虛擬模式切換到使用DataGridView的項目。

實施的DataGridView是有點太長了一個SO回答,但這裏有一個教程鏈接:

http://msdn.microsoft.com/en-us/library/2b177d6d.aspx