Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > .NET для новичков > Пропадает нарисованное |
Автор: Валерия 23.10.2007, 21:58 | ||
Когда я сворачиваю окно а потом сново разворачиваю, или сдвигаю за экран - линии (или части) уже нет. Почему, и как исправить? |
Автор: Bogdan1024 24.10.2007, 00:20 |
Нужно рисовать в обработчике события формы OnPaint. |
Автор: HAL707 24.10.2007, 16:35 |
Лучше кинуть на формочку какой-нибудь ImageBox и рисовать на графиксе имаджа. Graphics grx = Graphics.FromImage(<твой имажд>); В этом случае ничего пропадать не будет. |
Автор: HAL707 26.10.2007, 12:34 | ||
Это тоже, смотря какой рисунок и сколько времени его перерисовывать. Если на перерисовку уходит много вычислений - ImageBox с графикс. Если мало - можно и OnPaint использовать. |
Автор: VisualProgrammerNET 26.10.2007, 12:53 |
В смысле? Допустим, я щас пишу курсовую по банальному Волновому алгоритму нахождения пути. У меня поле из 2000 клеточек, где пользователь сам строит лабиринт, устанавливает начало пути и куда надо прийти. Вычисления все производятся до перерисовки, а не во время. То есть мы устанавливаем для каждой клеточки, как она должна выглядеть, а потом просто вызываем invalidate() и на форме всё быстренько перерисовывается, где-то за четверть секунды. |
Автор: HAL707 26.10.2007, 13:14 |
В прямом. Просто некоторые делают так: void pverride OnPaint(...) { Graphcs grx = e.Graphics; drx.DrawLine(....); //еще куча оперция рисования (иногда очень сложных) } Получается - при каждом вызове события перерисовки (при сворачивании - разворачивании формы) выполняется кучи одних и тех же опрераций. Спрашивается - зачем? Можно один раз взять графикс имджа ПикчеБокса и ОДИН РАЗ нарисовать на нем. |
Автор: VisualProgrammerNET 26.10.2007, 13:47 |
Ммм... вот именно, что если надо ОДИН РАЗ нарисовать что-то, что меняться не будет, тогда да. В большинстве случаев нужно постоянно что-то менять, перерисовывать. А так да, вот у меня КАЖДЫЙ РАЗ при вызове invalidate() рисуется 2000 квадратиков, плюс тысяча надписей и прочего, за минимальный промежуток времени, как видишь. Плюс, если тебе например надо сделать какую-нибудь рамку, т.е. 4 линии по периметру формы - тут боксами рисовать вообще глупо. |
Автор: Валерия 9.12.2007, 03:07 |
Не получается. Если я делаю картинку на фон какую-то, то когда вывожу за пределы экрана и возвращаю обратно - картинка остается, а часть нарисованного стирается. Если делаю OnPaint то вообще работает через раз, иногда просто затирает вообще всё. |
Автор: Experimenter 9.12.2007, 10:19 |
Валерия, код прикладывай к сообщениям, тогда вероятность того, что твою ошибку найдут, резко возрастет |