![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Валерия |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 10.3.2007 Репутация: 1 Всего: 8 |
Когда я сворачиваю окно а потом сново разворачиваю, или сдвигаю за экран - линии (или части) уже нет. Почему, и как исправить? |
|||
|
||||
Bogdan1024 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1436 Регистрация: 28.9.2005 Где: Киев Репутация: 3 Всего: 13 |
Нужно рисовать в обработчике события формы OnPaint.
-------------------- ![]() |
|||
|
||||
HAL707 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 6.9.2007 Репутация: 1 Всего: 4 |
Лучше кинуть на формочку какой-нибудь ImageBox и рисовать на графиксе имаджа.
Graphics grx = Graphics.FromImage(<твой имажд>); В этом случае ничего пропадать не будет. |
|||
|
||||
VisualProgrammerNET |
|
|||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 1 Всего: 6 |
Не лучше. перегруженный OnPaint - лучшее, что можно придумать. Быстрее, и не замусоривается память всякими, в обшем-то ненужными, контролами. Если перерисовывать нужно какие-то отдельные куски картинки, то всегда можно помудрить с флагами. -------------------- 3 ГОДА НА ![]() |
|||
|
||||
HAL707 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 6.9.2007 Репутация: 1 Всего: 4 |
Это тоже, смотря какой рисунок и сколько времени его перерисовывать. Если на перерисовку уходит много вычислений - ImageBox с графикс. Если мало - можно и OnPaint использовать. |
|||
|
||||
VisualProgrammerNET |
|
|||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 1 Всего: 6 |
В смысле? Допустим, я щас пишу курсовую по банальному Волновому алгоритму нахождения пути. У меня поле из 2000 клеточек, где пользователь сам строит лабиринт, устанавливает начало пути и куда надо прийти. Вычисления все производятся до перерисовки, а не во время. То есть мы устанавливаем для каждой клеточки, как она должна выглядеть, а потом просто вызываем invalidate() и на форме всё быстренько перерисовывается, где-то за четверть секунды. -------------------- 3 ГОДА НА ![]() |
|||
|
||||
HAL707 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 6.9.2007 Репутация: 1 Всего: 4 |
В прямом.
Просто некоторые делают так: void pverride OnPaint(...) { Graphcs grx = e.Graphics; drx.DrawLine(....); //еще куча оперция рисования (иногда очень сложных) } Получается - при каждом вызове события перерисовки (при сворачивании - разворачивании формы) выполняется кучи одних и тех же опрераций. Спрашивается - зачем? Можно один раз взять графикс имджа ПикчеБокса и ОДИН РАЗ нарисовать на нем. |
|||
|
||||
VisualProgrammerNET |
|
|||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 1 Всего: 6 |
Ммм... вот именно, что если надо ОДИН РАЗ нарисовать что-то, что меняться не будет, тогда да. В большинстве случаев нужно постоянно что-то менять, перерисовывать. А так да, вот у меня КАЖДЫЙ РАЗ при вызове invalidate() рисуется 2000 квадратиков, плюс тысяча надписей и прочего, за минимальный промежуток времени, как видишь.
Плюс, если тебе например надо сделать какую-нибудь рамку, т.е. 4 линии по периметру формы - тут боксами рисовать вообще глупо. Это сообщение отредактировал(а) VisualProgrammerNET - 26.10.2007, 13:48 -------------------- 3 ГОДА НА ![]() |
|||
|
||||
Валерия |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 10.3.2007 Репутация: 1 Всего: 8 |
Не получается.
Если я делаю картинку на фон какую-то, то когда вывожу за пределы экрана и возвращаю обратно - картинка остается, а часть нарисованного стирается. Если делаю OnPaint то вообще работает через раз, иногда просто затирает вообще всё. |
|||
|
||||
Experimenter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 4 Всего: 17 |
Валерия, код прикладывай к сообщениям, тогда вероятность того, что твою ошибку найдут, резко возрастет
Это сообщение отредактировал(а) Experimenter - 9.12.2007, 10:20 -------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | .NET для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |