Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рисование Элементов по нажатии кнопки, Рисование Элементов по нажатии кнопки 
:(
    Опции темы
LordZeus
Дата 8.5.2008, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 7.5.2008

Репутация: нет
Всего: нет



Здравствуйте.
Такая проблема: 
 если при отрисовке линии на форме по нажатии клавиши переключить активное окно  на другое а потом вернуться, то линия исчезает!!! 

В событии отрисовки, такого не происходит. Все, что нарисовано, то и остается. 

Код

private void Form1_Paint(object sender, PaintEventArgs e)
        {


И как сделать, чтобы после нажатия кнопки все линии связанные с обработчиком кнопки - стерлись и нарисовались заново, но при этом все, что отрисовалось в  Form1_Paint не изменилось?


Как быть ... помогите, спасайте!
 smile 

Это сообщение отредактировал(а) LordZeus - 8.5.2008, 00:37
PM MAIL   Вверх
Linus
Дата 8.5.2008, 06:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 13.8.2006
Где: Украина

Репутация: 1
Всего: 4



Нужно вынести код прорисовки линий из обработчика Form1_Paint в отдельный метод, в Form1_Paint и в обработчике нажатия кнопки поставить вызов этого метода. При этом метод прорисовки должен учитывать некоторую условную логику, какие именно линии и как нужно прорисовывать. Также можно подумать и о "двойной буферизации", если скорость важна очень (весь "фон" запомнить в какой-нить битмап, а динамически изменяющиеся линии выводить через GDI).
PM MAIL ICQ   Вверх
Veitmen
Дата 8.5.2008, 07:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 10.11.2006
Где: СПБ

Репутация: 3
Всего: 4



Linus сказал все правильно... Но чуть подробнее... 
1. Создать базовый класс, у которого будет метод Draw(), или создать интерфейс.
2. Создать для своего объекта класс, и унаследовать его от базового класса или реализовать интерфейс.
3. Создать класс контроллер, который будет хранить все ваши объекты, и предоставит логику для работы с ними, а также будет перебирать все элементы и вызывать у них Draw().

user posted image

Теперь для каждого объекта делаешь нужный тебе Draw(). И пихаешь на прорисовке формы ControllerDrawAll(). Только перед этим форму очисть.

Это самый простой способ сделать хорошую рисовалку.

Это сообщение отредактировал(а) Veitmen - 8.5.2008, 07:16
PM MAIL ICQ   Вверх
Linus
Дата 8.5.2008, 14:26 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 13.8.2006
Где: Украина

Репутация: 1
Всего: 4



Veitmen, если задача масштабная, то согласен, модель наворачивать можно до бесконечности (смотря что нужно, можно и контроллер детализировать и вынести логику в классы Command для поддержки истории команд). А если небольшая поделка, думаю можно обойтись и несколькими условными операторами впринципе. 

Цитата

Это самый простой способ сделать хорошую рисовалку.


P.S. Как раз над редактором и сижу сейчас smile
PM MAIL ICQ   Вверх
Veitmen
Дата 8.5.2008, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 10.11.2006
Где: СПБ

Репутация: 3
Всего: 4



Советую взглянуть на хороший библиотеку опен сурс. Есть даже встроенный скриптовый движок.

AGE

Вообще, есть какая то книжечко, там хорошо описывается процесс создания редактора, да и вообще много описания на эту тему, да и в сети исходников много валяется. Погугли.)
PM MAIL ICQ   Вверх
Linus
Дата 8.5.2008, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 13.8.2006
Где: Украина

Репутация: 1
Всего: 4



Veitmen, спасибо,  но мне нужно самому писать, чтоб заточить под конкретную задачу.

Цитата

Вообще, есть какая то книжечко, там хорошо описывается процесс создания редактора

GoF?
PM MAIL ICQ   Вверх
Veitmen
Дата 8.5.2008, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 10.11.2006
Где: СПБ

Репутация: 3
Всего: 4



Понятно. К сожалению я не могу сказать та или нет это книжка, потому что не помню, а погуглить лень.))
Все таки, даже если проект и не большой, сделай кой какую архитектурку, потом гораздо проще жить будет, никогда не знаешь когда и что пригодится. А делать напрямую через события конешно можно, но зачем? Времени ты много не потеряешь, при создании маленькой архитектурки.)) 

Это сообщение отредактировал(а) Veitmen - 8.5.2008, 18:34
PM MAIL ICQ   Вверх
LordZeus
Дата 10.5.2008, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 7.5.2008

Репутация: нет
Всего: нет



Спасибо товарищи! 
Сегодня попробую....надеюсь что получиться...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1478 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.