1

我编写了一个 Windows 窗体应用程序来解决Shikaku难题。目前,拼图网格是使用 PaintEventHandler 在应用程序主窗口的面板上绘制的。PaintEventHandler 调用的方法每次调用时都会重绘整个网格。虽然这种方法有效,但它闪烁且效率低下,我想用更平滑的方法替换它。

我在 Qt 中编写了许多类似的应用程序。使用 Qt,我会创建一个 QCanvas 和一个 QCanvasView。然后我可以向 QCanvas 添加对象或从中删除对象,并调用update()QCanvasView 上的方法以查看更改生效而不会闪烁。

我尝试过的另一种方法是保留对Graphics用于绘制面板的对象的引用,并尝试在 Paint 事件之外对其进行绘制。这不起作用:我遇到了一个相当无用的ArgumentException: Parameter is not valid异常,我只能假设它是由 Windows 抛出的,因为它并不期望应用程序在那时进行任何绘画。

有没有类似于 QCanvas for Windows Forms 的东西?如果不是,我应该使用什么方法来更新拼图网格?

4

2 回答 2

1

WindowsForms 控件的Paint事件通常具有设置为仅重绘控件的必要部分的上下文区域。这与设置DoubleBuffered为 true 通常足以解决大多数重绘问题。

此外,您会收到异常,因为Graphics您正在缓存的对象在绘制事件完成时已处置。

一种可行的方法(假设 DoubleBuffering 不够用)是Bitmap在您在 Paint 事件中在屏幕上绘画时将您的绘图绘制到屏幕外。或者,将位图托管在 a 中PictureBox并让重绘自动发生。

于 2009-02-15T23:52:24.803 回答
0

一个快速的想法 - 尝试 PyQt 怎么样?QCanvas 和 QCanvasView 应该可以在任何平台上正常工作

于 2010-10-11T15:03:40.627 回答