2009-11-16 70 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这个问题似乎消失了。