Есть ли аналог Qt QCanvas в Windows Forms? - PullRequest
1 голос
/ 15 февраля 2009

Я написал приложение для Windows Forms для решения Шикаку головоломок. На данный момент сетка головоломки рисуется на панели в главном окне приложения с помощью PaintEventHandler. Метод, вызываемый PaintEventHandler, перерисовывает всю сетку каждый раз, когда она вызывается. Хотя этот подход работает, он мерцающий и неэффективный, и я хотел бы заменить его на что-то более плавное.

Я написал несколько похожих приложений на Qt. С Qt я бы создал QCanvas и QCanvasView. Затем я могу добавить объекты или удалить объекты из QCanvas и вызвать метод update() в QCanvasView, чтобы изменения вступили в силу без мерцания.

Один из альтернативных подходов, которые я попробовал, состоял в том, чтобы сохранить ссылку на Graphics объект, используемый для рисования Panel, и пытаться рисовать на нем вне события Paint. Это не сработало: я получил довольно бесполезное исключение ArgumentException: Parameter is not valid, которое, я могу только предположить, было выдано Windows, потому что оно не ожидало, что приложение на этом этапе будет рисовать.

Есть ли что-то похожее на QCanvas для Windows Forms? Если нет, какой подход я должен использовать, чтобы обновить сетку головоломки?

Ответы [ 2 ]

1 голос
/ 16 февраля 2009

Событие Paint элементов управления WindowsForms обычно имеет область контекста, установленную для перерисовки только тех частей элемента управления, которые необходимы. Этого в сочетании с установкой DoubleBuffered в true обычно достаточно для большинства проблем с перекрашиванием.

Кроме того, вы получаете исключение, поскольку кэшируемый вами объект Graphics удаляется после завершения события рисования.

Один жизнеспособный подход, предполагающий, что DoubleBuffering не является достаточным, состоит в том, чтобы рисовать на экране Bitmap, когда вы рисуете на экране в событии Paint. Или разместите растровое изображение в PictureBox и позвольте перерисовке произойти автоматически.

0 голосов
/ 11 октября 2010

v.quick подумал - а как насчет PyQt? QCanvas и QCanvasView должны работать правильно на любой платформе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...