PictureBox绘制事件执行两次

时间:2011-11-25 09:31:40

标签: c# .net winforms picturebox managed-c++

我在WinForms表单中添加了一个图片框,并添加了一个绘图事件。当我调试它时,我看到paint事件被调用了两次。

我该如何解决?

2 个答案:

答案 0 :(得分:4)

图片框控件是围绕Windows绘制周期和WM_PAINT事件的相对宽松的包装。

WM_PAINT事件是一个排队的消息,只要系统认为窗口的绘图表面无效,系统就会将其置于应用程序消息队列中。出现这种情况的原因有很多:

  • 另一个窗口被拖到窗口的顶部(虽然现代窗户使用缓冲来缓解这种情况)。
  • 通过调用最终调用Win32 Invalidate函数的InvalidateRect使窗口无效。
  • 系统范围的主题偏好设置已更改。
  • 等。等

所以,这个问题的结论是你的图片框绘制处理程序需要在假设它被多次调用的情况下编写。

答案 1 :(得分:2)

每次重绘时都会触发paint事件。 paint事件处理程序中的代码应该能够处理它被称为n次。