![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Franz1981 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 8.10.2008 Репутация: нет Всего: нет |
В общем необходимо при изменении положения скролбара нарисовать прямую. Создаю объект Ер класса EpPos, и тутже вызываю Ep.Pos(), которая и должна нарисовать, но ничего не происходит;
|
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 18 Всего: 142 |
В саму логику прорисовки я не вчитывался, но что не правильно в остальном объясню. Тебе методы надо было в основной форме создавать, а ты вместо этого создаёшь производную от неё причём каждый раз при возникновении события. И вызываешь эти методы у второй формы(даже не запуская её, хотя этого делать ьочно не стоит)
То, что явно не правильно я исправил(не проверял), если будет другая ерунда - пиши. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Ctrl |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 12.2.2008 Где: Tula Репутация: нет Всего: 7 |
Заниматься прямым рисованием при изменении каких-то факторов - это не есть хорошо, ибо
нарисованное тобой пропадет при первом же чихе, да и к тому же, если отрисовка нетривиальная, перфоманс здорово просядет. Ну и плюс куча других менее очевидных причин... Нормальный сценарий - это изменение свойств[0] т.н. модели [1] (класс или группа классов, описывающих некие состояния и связанную с ними логику) и подача уведомления [2] об изменении модели в т.н. представление [3] (класс или группа классов анимающихся отображением UI или связанными с этим вещами) а уж оно(представление) и должно обеспечить отрисовку[4] Вот простой пример: (на форме горизонтальный и вертикальный скроллы, при изменении значения любого скролла считается некие процентные значения (Model) , которые отображаются в виде положения 2D точки на пересечении линий (View) )
p.s. возможно я и отклонился от темы, но в примере как раз показано, где и как надо рисовать |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 18 Всего: 142 |
Извини, но я покачто мысли читать не научился(работаю над этим), перечитай своё первое сообщение и попробуй найти там всё о чём ты пишешь во втором.
Для того, чтобы графика на пропадала "при каждом чихе" её надо отрисовывать всякий раз пр прорисовке формы (или другого контрола), в примере, который ты выложил во втором сообщении сделано именно так. Там картинка отрисовывается в методе OnPaint. Кроме того в твоём примере во-первых прорисовке ведётся в контроле(а не в новой форме), а во-вторых контрол не создаётся каждый раз заново. Поэтому всё происходит в одном контроле а не в разных, да и контрол размещается на форме, а не как у тебя создаётся и всё. Что касается изменения состояния(о котором в первом сообщении я тоже не нашёл ни слова) изложи задачу яснее. В общем случае для прорисовки нужно пользоваться не числами, а значениями свойств объекта, которые могут меняться, но опять-таки вместо того, чтобы описать, что тебе надо, ты привёл пример не имеющий(как я понимаю) отношения к твоей задаче. Если же говорить о твоём первом премере, то , извини, но там херня полная, потомучто ты содаёшь в базовом классе экземпляры производного, а он как известно наследет функциональльность предка, то есть это тоже форма, которая будет при изменении состояния скролбара создавать такие же формы. Просто ты забыл запустить эту форму(и хорошо, что забыл). Если же тебе нужно, чтобы состояние изображения поддерживалось другим объектом, то и создавай для этого, специальный класс, и в алгоритме прорисовки ипользуй данные из него, тоько не надо производить его от самой формы. А давать более конкретные советы с примерами я не могу пока ты не изложил задачу. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Ctrl |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 12.2.2008 Где: Tula Репутация: нет Всего: 7 |
2 diadiavova:
Немного непонятна причина твоих нападок - один человек (Franz1981) спросил как и где ему лучше что то отрисовать, привел свой пример. Другой человек (Ctrl) посмотрел его пример, прикинул что тот пытается сделать и где могут быть проблемы, и в ответ набросал свой пример на похожую тему. Причем тут чтение мыслей? Моей мотивацией было лишь желание поделиться опытом и помочь новичку меньше наступать на грабли... С уважением, Ctrl |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 18 Всего: 142 |
Не обращай много внимания на форму изложения, я и не думал ни о каких нападках, но просто когда ты задаёшь один вопрос, а получив на него ответ выкладываешь целый философический трактат (с употреблением слов типа "нетривиальный"), общий смысл которого в том, что я написал хрень, то я не знаю как ещё реагировать. А если некоторые обороты показались тебе резкими - извини.
А задачу всё-таки надо формулировать ясней, это я не в качестве очередной нападки, а просто совет, который поможет получить ясный ответ. Просмотри материалы форума и ты увидишь, что большинство вопросов, оставшихся без ответа, просто непонятно сформулированы. А на мой стиль не обращай внимания. С ничуть не меньшим уважением, diadiavova. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 18 Всего: 142 |
Ctrl, До меня только сейчас дошло, что я разговаривал с двумя разным людьми. Извиняюсь, пропёрся.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Franz1981 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 8.10.2008 Репутация: нет Всего: нет |
diadiavova,
Ctrl, Огромное вам спасибо!) |
|||
|
||||
| Franz1981 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 8.10.2008 Репутация: нет Всего: нет |
Итак возник новый вопрос. Вот я отдельно создал класс
Вот и вопрос в следующем: в какой части кода(нижеприведённого) мне необходимо объявить создание экземпляра? чтобы методы класса были доступны для, например, событий Основой упор я сейчас делаю на понимание принципа работы класса, рисование ,пока, второстепенно.
|
||||
|
|||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 18 Всего: 142 |
Это зависит от того, для чего тебе это надо. Но в любом случае конструкция опасная, может привести(при неправильном использованиии) к бесконечному рекурсивному вызову.
Представь себе, что всё, что ты сейчас напишешь, так же окажется и в классе Epur, включая создание нового экземпляра. То есть, в базовом классе, ты создаёшь экземпляр производного, тот в свою очередь наследует эту функциональность и так же создаёт очередной экземпляр, дальше всё работает по принципу
Если ты более понятно обрисуешь что тебе надо, то можно будет решить проблему. Тебе надо понять, что класс Epur - тоже форма, и в ней есть всё, что и в Form1. В этом суть наследования. Опиши, что тебе надо. Прорисовка в самой форме, или создание другой. И если последнее, то зачем ты производишь её от вызывающей формы Вот это зачем нужно? -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 18 Всего: 142 |
Если я непонятно объяснил - проведи такой эксперимент
Понимаю, "спасибо" за этот код ты не скажешь, но по крайней мере поймёшь, о чём я толкую. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Franz1981 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 8.10.2008 Репутация: нет Всего: нет |
цель наследования - получить доступ к объектам формы..ерунда да?)
а вот насчёт последнего примера, я так и делал, только в какихто случаях компиляция происходила с ошибкой а в других просто не работало ничего. |
|||
|
||||
| diadiavova |
|
||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 18 Всего: 142 |
Если бы ты так и сделал, у тебя при запуске формы начали бы создаваться и вызываться всё новые формы пока не произошло бы переполнение стэка, о чём тебя уведомило бы окно сообщений.
Наследование влечёт за собой не только доступ, но и получение всей функциональности базового класса оптом(за исключением тех функций, которые спрятаны от наследников, но и они могут делать своё чёрное дело). Для получения доступа есть масса других способов. Определение модификаторов области видимости(private, public и т.д.) - самый простой путь. Получить доступ к public членам можно откуда угодно, можно метод сделать видимым только для производных классов(protected), или например только для тех, которые определены в той же сборке(извиняюсь - как это на сишарпе не знаю, в VBNet это Friend), так что если дело только в этом, то наследование тут не причём, потомучто, доступными только для наследников являются только члены описанные как protected. Если не подходит - тут надо смотреть по задаче, я поэтому и говорю, что пока не ясен диагноз, трудно назначить лечение. Но в любом случае надо понимать, что экземпляр производного класса, является так же экземпляром базового класса, и наследует его поведение. Если в Form1 ты выполняешь какое-либо действие, это означает, что в Epur оно тоже будет выполняться, поэтому, создавая экземпляр Epur в Form1, ты по сути создаёшь ещё одну такую же форму(которая будет вести себя так же), только с некоторыми дополнительными элементами поведения. Но она тоже будет создавать очередной экземпляр, и с ним произойдёт то же самое. В некоторых случаях подобная логика нужна, но если этот процесс не контролируется - это приводит к переполнению стэка. Я ещё раз повторяю: Опиши задачу. Твой вопрос
это всё равно, что я спросил бы
Это сообщение отредактировал(а) diadiavova - 9.10.2008, 16:45 -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||
|
|||||
| Franz1981 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 8.10.2008 Репутация: нет Всего: нет |
я хочу, чтобы был отдельно класс, максимально выполняющий поставленную задачу, чтобы в основном коде были только вызовы функций, вот. Сейчас пробовал класс не наследовать от Form1, скролбары сделал public, но почемуто доступ из класса к ним получить никак не могу.
|
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 18 Всего: 142 |
Покажи как ты сделал, я объясню, что не правильно.
Добавлено через 2 минуты и 25 секунд Покажи как ты сделал, я объясню, что не правильно. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |