| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > Класс |
| Автор: Franz1981 8.10.2008, 16:04 | ||
В общем необходимо при изменении положения скролбара нарисовать прямую. Создаю объект Ер класса EpPos, и тутже вызываю Ep.Pos(), которая и должна нарисовать, но ничего не происходит;
|
| Автор: diadiavova 8.10.2008, 21:29 | ||
В саму логику прорисовки я не вчитывался, но что не правильно в остальном объясню. Тебе методы надо было в основной форме создавать, а ты вместо этого создаёшь производную от неё причём каждый раз при возникновении события. И вызываешь эти методы у второй формы(даже не запуская её, хотя этого делать ьочно не стоит)
То, что явно не правильно я исправил(не проверял), если будет другая ерунда - пиши. |
| Автор: Ctrl 9.10.2008, 01:39 | ||
| Заниматься прямым рисованием при изменении каких-то факторов - это не есть хорошо, ибо нарисованное тобой пропадет при первом же чихе, да и к тому же, если отрисовка нетривиальная, перфоманс здорово просядет. Ну и плюс куча других менее очевидных причин... Нормальный сценарий - это изменение свойств[0] т.н. модели [1] (класс или группа классов, описывающих некие состояния и связанную с ними логику) и подача уведомления [2] об изменении модели в т.н. представление [3] (класс или группа классов анимающихся отображением UI или связанными с этим вещами) а уж оно(представление) и должно обеспечить отрисовку[4] Вот простой пример: (на форме горизонтальный и вертикальный скроллы, при изменении значения любого скролла считается некие процентные значения (Model) , которые отображаются в виде положения 2D точки на пересечении линий (View) )
p.s. возможно я и отклонился от темы, но в примере как раз показано, где и как надо рисовать |
| Автор: diadiavova 9.10.2008, 10:07 |
| Извини, но я покачто мысли читать не научился(работаю над этим), перечитай своё первое сообщение и попробуй найти там всё о чём ты пишешь во втором. Для того, чтобы графика на пропадала "при каждом чихе" её надо отрисовывать всякий раз пр прорисовке формы (или другого контрола), в примере, который ты выложил во втором сообщении сделано именно так. Там картинка отрисовывается в методе OnPaint. Кроме того в твоём примере во-первых прорисовке ведётся в контроле(а не в новой форме), а во-вторых контрол не создаётся каждый раз заново. Поэтому всё происходит в одном контроле а не в разных, да и контрол размещается на форме, а не как у тебя создаётся и всё. Что касается изменения состояния(о котором в первом сообщении я тоже не нашёл ни слова) изложи задачу яснее. В общем случае для прорисовки нужно пользоваться не числами, а значениями свойств объекта, которые могут меняться, но опять-таки вместо того, чтобы описать, что тебе надо, ты привёл пример не имеющий(как я понимаю) отношения к твоей задаче. Если же говорить о твоём первом премере, то , извини, но там херня полная, потомучто ты содаёшь в базовом классе экземпляры производного, а он как известно наследет функциональльность предка, то есть это тоже форма, которая будет при изменении состояния скролбара создавать такие же формы. Просто ты забыл запустить эту форму(и хорошо, что забыл). Если же тебе нужно, чтобы состояние изображения поддерживалось другим объектом, то и создавай для этого, специальный класс, и в алгоритме прорисовки ипользуй данные из него, тоько не надо производить его от самой формы. А давать более конкретные советы с примерами я не могу пока ты не изложил задачу. |
| Автор: Ctrl 9.10.2008, 10:36 |
| 2 diadiavova: Немного непонятна причина твоих нападок - один человек (Franz1981) спросил как и где ему лучше что то отрисовать, привел свой пример. Другой человек (Ctrl) посмотрел его пример, прикинул что тот пытается сделать и где могут быть проблемы, и в ответ набросал свой пример на похожую тему. Причем тут чтение мыслей? Моей мотивацией было лишь желание поделиться опытом и помочь новичку меньше наступать на грабли... С уважением, Ctrl |
| Автор: diadiavova 9.10.2008, 10:47 |
| Не обращай много внимания на форму изложения, я и не думал ни о каких нападках, но просто когда ты задаёшь один вопрос, а получив на него ответ выкладываешь целый философический трактат (с употреблением слов типа "нетривиальный"), общий смысл которого в том, что я написал хрень, то я не знаю как ещё реагировать. А если некоторые обороты показались тебе резкими - извини. А задачу всё-таки надо формулировать ясней, это я не в качестве очередной нападки, а просто совет, который поможет получить ясный ответ. Просмотри материалы форума и ты увидишь, что большинство вопросов, оставшихся без ответа, просто непонятно сформулированы. А на мой стиль не обращай внимания. С ничуть не меньшим уважением, diadiavova. |
| Автор: diadiavova 9.10.2008, 11:59 |
| Ctrl, До меня только сейчас дошло, что я разговаривал с двумя разным людьми. Извиняюсь, пропёрся. |
| Автор: Franz1981 9.10.2008, 13:18 |
| diadiavova, Ctrl, Огромное вам спасибо!) |
| Автор: Franz1981 9.10.2008, 14:34 | ||||
Итак возник новый вопрос. Вот я отдельно создал класс
Вот и вопрос в следующем: в какой части кода(нижеприведённого) мне необходимо объявить создание экземпляра? чтобы методы класса были доступны для, например, событий Основой упор я сейчас делаю на понимание принципа работы класса, рисование ,пока, второстепенно.
|
| Автор: diadiavova 9.10.2008, 14:48 | ||
| Это зависит от того, для чего тебе это надо. Но в любом случае конструкция опасная, может привести(при неправильном использованиии) к бесконечному рекурсивному вызову. Представь себе, что всё, что ты сейчас напишешь, так же окажется и в классе Epur, включая создание нового экземпляра. То есть, в базовом классе, ты создаёшь экземпляр производного, тот в свою очередь наследует эту функциональность и так же создаёт очередной экземпляр, дальше всё работает по принципу
Если ты более понятно обрисуешь что тебе надо, то можно будет решить проблему. Тебе надо понять, что класс Epur - тоже форма, и в ней есть всё, что и в Form1. В этом суть наследования. Опиши, что тебе надо. Прорисовка в самой форме, или создание другой. И если последнее, то зачем ты производишь её от вызывающей формы Вот это зачем нужно? |
| Автор: diadiavova 9.10.2008, 15:09 | ||
Если я непонятно объяснил - проведи такой эксперимент
Понимаю, "спасибо" за этот код ты не скажешь, но по крайней мере поймёшь, о чём я толкую. |
| Автор: Franz1981 9.10.2008, 15:37 |
| цель наследования - получить доступ к объектам формы..ерунда да?) а вот насчёт последнего примера, я так и делал, только в какихто случаях компиляция происходила с ошибкой а в других просто не работало ничего. |
| Автор: Franz1981 10.10.2008, 09:33 |
| я хочу, чтобы был отдельно класс, максимально выполняющий поставленную задачу, чтобы в основном коде были только вызовы функций, вот. Сейчас пробовал класс не наследовать от Form1, скролбары сделал public, но почемуто доступ из класса к ним получить никак не могу. |
| Автор: diadiavova 10.10.2008, 10:02 |
| Покажи как ты сделал, я объясню, что не правильно. Добавлено через 2 минуты и 25 секунд Покажи как ты сделал, я объясню, что не правильно. |
| Автор: Franz1981 10.10.2008, 10:39 | ||||||
взял из соседней темы класс:
и
не очень понятны некоторые моменты в описании методов класса, и ещё когда вот создаю экземпляр "с", он недоступен из
|
| Автор: diadiavova 10.10.2008, 11:47 |
| Покажи как ты сделал, я объясню, что не правильно. |
| Автор: Franz1981 10.10.2008, 12:33 | ||||
вобщем остался только один вопрос:
|
| Автор: diadiavova 10.10.2008, 12:42 | ||
Переменную надо создавать на уровне класса, а в методе при создании экземпляра передавать его этой переменной. Доступ к объекту можно получить через переменную.
В этом случае обратиться к полю f экземпляра aaa можно откуда угодно, а инициируется оно в конструкторе. |
| Автор: Franz1981 10.10.2008, 13:00 |
| не понял |
| Автор: mihryak 10.10.2008, 13:02 |
| может книжку всё же? ;) |
| Автор: diadiavova 10.10.2008, 13:11 | ||||
Вот так сделано у тебя
А вот так надо
Книжка - дело хорошее, и самао собой надо, только вот ведь в чём беда, если в книжке чего не понятно - никто разжёвывать не будет. А поскольку книжки пишут профессионалы, им иногда кажется тема лёгкой и не требующей дополнительных разъяснений, а новичку не понятно. Для того и существуют форумы. |
| Автор: Franz1981 10.10.2008, 13:22 |
| Большое спасибо, diadiavova!! |