2009-11-16 51 views
3

我正在繪製.Net Windows窗體ListView控件,並在需要從關聯的LargeImageList中繪製圖像時看到一個非常奇怪的錯誤/行爲。.Net Windows窗體ListView OwnerDraw LargeImageList泄漏

當View類型是使用LargeImageList(Tile,LargeIcon等)的類型時,我從LargeImageList中繪製項目圖像。在這種情況下,我看到了巨大的內存增加,當您嘗試滾動ListView時,這會變得更加明顯,因爲您還會看到一個生澀的滾動。當同樣的代碼使用SmallImageList這同樣的事情不會發生這簡直是這樣的:

Image MyImage = this.LargeImageList.Images[MyIndex]; 
e.Graphics.DrawImage(MyImage,MyLocation); 

這根據我的測試是XP和7下可再現。這是一個已知的錯誤,任何解決方法?

問候,

Özden

回答

1

你是如何管理失效繪圖區域?正如你所說,看起來你是「透支」控制,我的意思是,即使在沒有必要的情況下也可以繪製。

+0

從.Net 2開始,ListView提供了ownerdraw功能並引發了諸如DrawItem,DrawSubItem等事件。我想這些事件會在需要重繪時爲每個項目提出。我不重寫控件WNDProc來捕獲WM_PAINT或其他任何東西。 – 2009-11-16 18:29:59

3

儘管我仍然認爲這是一個錯誤,但我發現了一個解決方法。如果使用ImageList.Draw而不是e.Graphics.DrawImage這個問題似乎消失了。