我编写了一个 Windows 窗体应用程序来解决Shikaku难题。目前,拼图网格是使用 PaintEventHandler 在应用程序主窗口的面板上绘制的。PaintEventHandler 调用的方法每次调用时都会重绘整个网格。虽然这种方法有效,但它闪烁且效率低下,我想用更平滑的方法替换它。
我在 Qt 中编写了许多类似的应用程序。使用 Qt,我会创建一个 QCanvas 和一个 QCanvasView。然后我可以向 QCanvas 添加对象或从中删除对象,并调用update()
QCanvasView 上的方法以查看更改生效而不会闪烁。
我尝试过的另一种方法是保留对Graphics
用于绘制面板的对象的引用,并尝试在 Paint 事件之外对其进行绘制。这不起作用:我遇到了一个相当无用的ArgumentException: Parameter is not valid
异常,我只能假设它是由 Windows 抛出的,因为它并不期望应用程序在那时进行任何绘画。
有没有类似于 QCanvas for Windows Forms 的东西?如果不是,我应该使用什么方法来更新拼图网格?