![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| LordZeus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 7.5.2008 Репутация: нет Всего: нет |
Здравствуйте.
Такая проблема: если при отрисовке линии на форме по нажатии клавиши переключить активное окно на другое а потом вернуться, то линия исчезает!!! В событии отрисовки, такого не происходит. Все, что нарисовано, то и остается.
И как сделать, чтобы после нажатия кнопки все линии связанные с обработчиком кнопки - стерлись и нарисовались заново, но при этом все, что отрисовалось в Form1_Paint не изменилось? Как быть ... помогите, спасайте! Это сообщение отредактировал(а) LordZeus - 8.5.2008, 00:37 |
|||
|
||||
| Linus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.8.2006 Где: Украина Репутация: 1 Всего: 4 |
Нужно вынести код прорисовки линий из обработчика Form1_Paint в отдельный метод, в Form1_Paint и в обработчике нажатия кнопки поставить вызов этого метода. При этом метод прорисовки должен учитывать некоторую условную логику, какие именно линии и как нужно прорисовывать. Также можно подумать и о "двойной буферизации", если скорость важна очень (весь "фон" запомнить в какой-нить битмап, а динамически изменяющиеся линии выводить через GDI).
|
|||
|
||||
| Veitmen |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 10.11.2006 Где: СПБ Репутация: 3 Всего: 4 |
Linus сказал все правильно... Но чуть подробнее...
1. Создать базовый класс, у которого будет метод Draw(), или создать интерфейс. 2. Создать для своего объекта класс, и унаследовать его от базового класса или реализовать интерфейс. 3. Создать класс контроллер, который будет хранить все ваши объекты, и предоставит логику для работы с ними, а также будет перебирать все элементы и вызывать у них Draw(). ![]() Теперь для каждого объекта делаешь нужный тебе Draw(). И пихаешь на прорисовке формы ControllerDrawAll(). Только перед этим форму очисть. Это самый простой способ сделать хорошую рисовалку. Это сообщение отредактировал(а) Veitmen - 8.5.2008, 07:16 |
|||
|
||||
| Linus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.8.2006 Где: Украина Репутация: 1 Всего: 4 |
Veitmen, если задача масштабная, то согласен, модель наворачивать можно до бесконечности (смотря что нужно, можно и контроллер детализировать и вынести логику в классы Command для поддержки истории команд). А если небольшая поделка, думаю можно обойтись и несколькими условными операторами впринципе.
P.S. Как раз над редактором и сижу сейчас |
|||
|
||||
| Veitmen |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 10.11.2006 Где: СПБ Репутация: 3 Всего: 4 |
Советую взглянуть на хороший библиотеку опен сурс. Есть даже встроенный скриптовый движок.
AGE Вообще, есть какая то книжечко, там хорошо описывается процесс создания редактора, да и вообще много описания на эту тему, да и в сети исходников много валяется. Погугли.) |
|||
|
||||
| Linus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.8.2006 Где: Украина Репутация: 1 Всего: 4 |
Veitmen, спасибо, но мне нужно самому писать, чтоб заточить под конкретную задачу.
GoF? |
|||
|
||||
| Veitmen |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 10.11.2006 Где: СПБ Репутация: 3 Всего: 4 |
Понятно. К сожалению я не могу сказать та или нет это книжка, потому что не помню, а погуглить лень.))
Все таки, даже если проект и не большой, сделай кой какую архитектурку, потом гораздо проще жить будет, никогда не знаешь когда и что пригодится. А делать напрямую через события конешно можно, но зачем? Времени ты много не потеряешь, при создании маленькой архитектурки.)) Это сообщение отредактировал(а) Veitmen - 8.5.2008, 18:34 |
|||
|
||||
| LordZeus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 7.5.2008 Репутация: нет Всего: нет |
Спасибо товарищи!
Сегодня попробую....надеюсь что получиться... |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |