Я написал приложение для Windows Forms для решения Шикаку головоломок. На данный момент сетка головоломки рисуется на панели в главном окне приложения с помощью PaintEventHandler. Метод, вызываемый PaintEventHandler, перерисовывает всю сетку каждый раз, когда она вызывается. Хотя этот подход работает, он мерцающий и неэффективный, и я хотел бы заменить его на что-то более плавное.
Я написал несколько похожих приложений на Qt. С Qt я бы создал QCanvas и QCanvasView. Затем я могу добавить объекты или удалить объекты из QCanvas и вызвать метод update()
в QCanvasView, чтобы изменения вступили в силу без мерцания.
Один из альтернативных подходов, которые я попробовал, состоял в том, чтобы сохранить ссылку на Graphics
объект, используемый для рисования Panel, и пытаться рисовать на нем вне события Paint. Это не сработало: я получил довольно бесполезное исключение ArgumentException: Parameter is not valid
, которое, я могу только предположить, было выдано Windows, потому что оно не ожидало, что приложение на этом этапе будет рисовать.
Есть ли что-то похожее на QCanvas для Windows Forms? Если нет, какой подход я должен использовать, чтобы обновить сетку головоломки?