I've written a Windows Forms application to solve Shikaku puzzles. At the moment, the puzzle grid is drawn on a Panel in the app's main window using a PaintEventHandler. The method called by the PaintEventHandler redraws the entire grid every time it is called. Whilst this approach works, it is flickery and inefficient, and I would like to replace it with something smoother.
I've written a number of similar applications in Qt. With Qt, I'd create a QCanvas and a QCanvasView. I can then add objects to, or remove objects from, the QCanvas and call the update()
method on the QCanvasView to see the changes take effect without flicker.
One alternative approach I have tried was to keep a reference to the Graphics
object used to paint the Panel and attempt to draw on it outside of a Paint event. This didn't work: I got a rather unhelpful ArgumentException: Parameter is not valid
exception, which I can only assume was thrown by Windows because it wasn't expecting the app to do any painting at that point.
Is there something similar to a QCanvas for Windows Forms? If not, what approach should I use to update the puzzle grid?