Событие рисования PictureBox выполняется дважды - PullRequest
0 голосов
/ 25 ноября 2011

Я добавил графическую рамку в форму WinForms и добавил событие рисования. Когда я отлаживаю его, я вижу, что событие рисования вызывается дважды.

Как я могу это исправить?

Ответы [ 2 ]

4 голосов
/ 25 ноября 2011

Элемент управления Picture Box является относительно свободной оболочкой для циклов рисования Windows и события WM_PAINT.

Событие WM_PAINT - это сообщение в очереди, которое система помещает в очередь сообщений вашего приложения всякий раз, когда считает, что поверхность рисования окна недопустима. Это может произойти по многим причинам:

  • Другое окно перетаскивается поверх вашего окна (хотя современные окна используют буферизацию для облегчения этого).
  • Вы аннулируете окно, вызывая Invalidate, что в конечном итоге вызывает функцию Win32 InvalidateRect.
  • Изменены настройки темы для всей системы.
  • Etc. и т.д.

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

2 голосов
/ 25 ноября 2011

Событие рисования запускается при каждом перерисовке, что довольно часто.Код в вашем обработчике событий рисования должен быть в состоянии справиться с тем, что он вызывается n раз.

...