2012-01-08 2 views
0

У меня проблема: моему приложению нужно нарисовать некоторые изображения на панелях.Как нарисовать изображения на панелях без перекраски?

Я делаю это на событии Paint (..).

Но если я перемещаю окно приложения, тогда форма и все элементы управления будут перерисовываться.

Как я могу уйти от него? Может быть, я должен изменить событие для paiting? Я попытался нарисовать событие Load (..), но приложение ничего не рисует в панели таким образом.

+1

Почему это плохо, что ваш интерфейс перекрашивается? – ZippyV

+0

Неплохо, но мой экран мерцает – user1134602

+0

Установите свойство «DoubleBuffered» в вашей форме, как говорит Тигран. – ZippyV

ответ

0

Только детали, используемые рисуются приложением. Поэтому, когда не обнаружены ранее невидимые части (перемещая это окно или окна над ним или изменяя размер, сводя к минимуму/увеличивая и т. Д.), Недостающие части необходимо перерисовать, что и есть то, что вы видите.

Если вы не можете просто перерисовать детали, вы можете, например, использовать растровое изображение и PictureBox для кэширования отрисованных данных, так что для перерисовки окна требуется, чтобы растровое изображение было перенесено на экран без фактического перерисовки содержимого растрового изображения ,

В этом случае вы рисуете свой материал на холсте растрового изображения вместо холста формы.

+0

Пожалуйста, скажите, как я должен рисовать на холсте и устанавливать его для PictureBox или Panel? – user1134602

+0

Создайте «Растровое изображение», создайте объект «Graphics» на этом растровом изображении, нарисуйте его, назначьте растровое изображение в «PictureBox». Не забудьте правильно удалить объект «Graphics» (лучше всего сделать с помощью инструкции 'using'). – Lucero

+0

спасибо. – user1134602

0

Вы не можете избавиться от Repaint(), так как это фундаментальная функция OS.

Имо, вы относитесь к переворачиванию после изменения размера. Чтобы решить эту проблему, вы можете сделать это как в my answer.

Вы можете использовать Pictureboxes вместо рисования их и, кстати, не забудьте включить double buffering

Смежные вопросы