2017-06-30 43 views
2

我目前正在使用Embarcadero C++上的TListView,可能有數千個項目的對象。 我想設置一個CTRL + A功能,以便一次選擇所有的項目。然而,我使用myListView-> SelectAll()來管理它,它會爲每個項目(!!!)啓動一個OnSelectItem事件,這可能需要很長時間。 我嘗試了BeginUpdate/EndUpdate,Enabled = false,根本沒有結果 - 即爲每個項目觸發OnSelectItem。 即使我設置了一個變量來實現從OnSelectItem事件立即返回,它需要太多的時間。如何避免TListView觸發OnSelectItem事件(C++ Embarcadero)

是否有一個簡單的解決方案來避免在調用SelectAll()時觸發數千個事件?

感謝您的任何幫助。

+0

請嘗試註釋掉你OnSelectItem()身體檢查,如果它仍然需要一個不可接受的時間 – Roberto

+0

那麼做呢?我將再次需要一些其他功能的OnSelectItem ...好吧,我會嘗試... –

+1

好吧,我試過了。我們從18秒(對OnSelectItem進行處理,測試一個布爾值並返回)到6秒(沒有OnSelectItem處理),計算38k個項目。 –

回答

0

如果這是不可能的,我不會感到驚訝,但我想知道爲什麼調用OnSelectItem的時間少於100 000個項目......爲什麼只需要改進OnSelectItem管理性能,例如,從他們剛剛返回,如果你是在一個全選的中間

後添加一些評論:

呀,TListView的並不意味着有這麼多的項目工作,我看不到任何用戶滾動那麼多行,反正,現在看來,這將是快了很多,如果你在另一個線程like they recommend in this Embarcadero article

+0

已經這樣做了:OnSelectItem過程只是測試一個布爾值然後返回。 –

+0

恩,謝謝...那就是我害怕的。 –

+0

好吧,我想我找到了一種加快速度的方法:當我選擇第一個項目,然後在鍵盤上點擊CTRL + MAJ + END,所有項目都會被選中。現在,我必須找出如何在控件上發送按鍵,這似乎是我要問的下一個問題,似乎我找不到任何有價值的答案。敬請關注! –