![]() |
Модераторы: diadiavova, gambit |
![]() ![]() ![]() |
|
kobalt |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 24.9.2008 Где: москва Репутация: нет Всего: нет |
Элементарное рисование. Из учебника взял пример с рисованием. Все рисует, но только после какого нибудь события (нажатие кнопки).
Пробовал вставить код в Form1_Load - ничего не получается (да и в книге об этом говорится). В какую часть вставить код по рисованию графики, чтобы она рисовалась сразу после запуска программы, но до нажатий кнопок? |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Если нужно, чтобы графика была устойчивой, то прорисовывать её надо постоянно, то есть код прорисовки надо вставлять либо в обработчик события Paint, либо переопределив метод OnPaint в производном классе.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
kobalt |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 24.9.2008 Где: москва Репутация: нет Всего: нет |
Задам вопрос подругому.
Есть код, по которому при нажатии Button1 рисуется линия.
Как сделать так, чтобы линия рисовалась до нажатия Button1. |
|||
|
||||
diadiavova |
|
||||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Когда ты ставишь код в обработчик Load, линии нет не потому, что она не прорисовалась, а потому, что после появления формы она была перерисована. Если тебе надо, чтобы линия была видна, делай так. А ещё лучше так
или вообще так
хотя эффект один. А вот, если ты однократно прорисуешь(хоть по клику, хоть как) то при следующей перерисовке формы линия пропадёт. Кроме того, если перерисовываться будет не вся форма, а только её часть(например если на переднем плане другая форма закроет часть твоей) то та часть, которая перерисуется сотрёт твой рисунок, а остальное останется. Поэтому надо либо переопределять метод(как показано), либо делать это в обработчике события Paint(в случае, когда нет доступа к Protected методам). Это сообщение отредактировал(а) diadiavova - 7.10.2008, 20:33 -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
||||||
|
|||||||
kobalt |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 24.9.2008 Где: москва Репутация: нет Всего: нет |
Вставлял примеры в VB - работает , но как - до конца не разобрался...
Пытался изменить координаты рисуемых линий - ничего не получается. Переделал вопрос:
задача все та же - рисование линии до нажатия кнопки. вопрос по моей процедуре Ris_line() - нужно ли в ней объявлять каждый раз перед рисаванием Dim graf As Graphics = Me.CreateGraphics? может это где то раньше надо сделать 1 раз? Как сделать правильно? |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Вот честно говоря, даже не знаю что и ответить. Вроде всё написал, думал, что понятно. Нужно, чтобы рисовалось всё надо завязать на методе OnPaint. Нужно из своего метода прорисовать - вызывай свой метод из OnPaint. Нужно работать с Graphics - передай всё что надо в качестве аргумента
Свою процедуру расчёта можешь вызывать при прорисовке из метода, который её выполняет. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
kipelovets |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 7.10.2007 Репутация: нет Всего: нет |
попробую объяснить понятнее.
в определенные моменты времени: при запуске приложения, когда твоя форма изменяет размер, восстанавливается из свернутого состояния, когда ее перекрывают другие формы, - происходит перерисовка содержимого формы. при этом ей плевать на линии, которые ты там раньше нарисовал, и они конечно стираются. для того, чтобы избежать этого - чтобы линии оставались после перерисовки, которую инициирует Windows, - нужно самому рисовать свои линии каждый раз когда происходит событие OnPaint. тоесть нужно вставить вызов методов, которые рисуют линии в обработчик OnPaint, что и показал diadiavova |
|||
|
||||
kobalt |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 24.9.2008 Где: москва Репутация: нет Всего: нет |
Вопрос: Где можно почитать (лучше в книжках - автор, название) о методе OnPaint
Методом тыка пытался подставить предложенный выше вариант в свою программу. Не получается ![]() Хочу чтобы при нажатии кнопки перерисовывалась линия, но уже с новыми значениями точек.
![]() |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Если при перерисовке учтены новые значения точек, то для вызова перерисовки по нажатию кнопки просто надо вызвать метод Invalidate.
Добавлено через 1 минуту и 3 секунды
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
kobalt |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 24.9.2008 Где: москва Репутация: нет Всего: нет |
Суперррр!
Похоже на шаманство ![]() Подставил строчку и все заработало! А все же - что это было? Спасибо! |
|||
|
||||
VK_Techno |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 29.9.2007 Репутация: нет Всего: нет |
Метод Invalidate() принудительно перерисовывает форму. Без него новая линия появилась бы только при первой перерисовке формы, например, при перекрытии её другим окном.
Это сообщение отредактировал(а) VK_Techno - 28.10.2008, 19:24 |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Никакого шаманства, просто метод Invalidate, внутренне вызывает метод OnPaint, кроме того, как тут уже говорилось этот метод вызывается при каждой прорисовке формы. Кстати аргумент е содержит и другую полезную информацию, например: перерисовываемую область, так что совсем не обязательно перерисовывать всё, особенно когда надо рисовать много, да и Invalidate - тоже перегружен. И касается всё это не только форм, но и всех контролов вообще. А если нужно рисовать в другом контроле (когда нет доступа к Protected членам, то надо использовать событие Paint. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
kobalt |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 24.9.2008 Где: москва Репутация: нет Всего: нет |
Спасибо за помощь!
Еще вопрос. На форме есть 2 элемента Panel. Вчера попытался размножить готовое решение - ничего не получилось. нужно чтобы : 1. считаю координаты (знаю как) 2. рисую первый график на Panel1 (не знаю как) 3. считаю другие координаты (знаю как) 4. рисую другой график на Panel2 (не знаю как) 5. элементом TrackBar1 изменяю начальные значения и повторяю п.1 - 5 |
|||
|
||||
diadiavova |
|
||||||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Я ведь написал об этом
Чтобы нарисовать в другом контроле делать это нужно в обработчике события Paint то есть вместо
Надо писать
и картинка прорисуется в Panel2. PS Сейчас точно не помню, но если картинка на прорисуется, то после кода прорисовки вызови Refresh
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
||||||||
|
|||||||||
kobalt |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 24.9.2008 Где: москва Репутация: нет Всего: нет |
Спасибо diadiavova за активную помощь.
Всем кому интересно привожу результат - учебный пример показывающий как рисовать в VB.NET На форму нужно разместить 2 элемента Panel и 1 кнопку. Перейти на form1.vb (код form1) и скопировать туда следующий код:
При запуске программы в окне в двух панелях выводятся 2 графика При нажатии кнопки идет расчет новых координат, очищаются панели и рисуются новые графики. ![]() ![]() ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума VB .NET | |
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | VB .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |