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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сложные GUI с большим количеством элементов, Какие методы вы используете? 
V
    Опции темы
Track
Дата 9.10.2013, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



При завершении проекта часто оказывается, что самый большой класс - это Form, на которой уже собираются все классы и элементы.
Кнопки, меню и прочее.
Количество элементов запросто может достигнуть пары сотен а то и больше.

Пока что для себя придумал разбивать эти элементы на этакие модули.
К примеру беру панель со всеми ее кнопочками и прочим и выношу ее как отдельный класс, унаследованный от UserControl.
По возможности в этом же модуле пишу все обработки кнопок и т.д.

Если что-то надо отрабатывать на главной форме, то открываю доступ через public или internal.
Но тут есть некоторые неудобства - например если хочу сделать инициализацию этого модуля с параметрами 
или например добавить в главной форме к этому модулю еще какой-то Control (myModule.Element.Controls.Add(myButton))
то при работе в дизайнере VS эти строки удаляются.
Как это побороть?

А какие методы вы используете при разработке сложных форм?

PM MAIL WWW   Вверх
dzaraev
Дата 10.10.2013, 07:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Track @  9.10.2013,  19:31 Найти цитируемый пост)
К примеру беру панель со всеми ее кнопочками и прочим и выношу ее как отдельный класс, унаследованный от UserControl.

Всё вено - для этого UserControl и создан.

Цитата(Track @  9.10.2013,  19:31 Найти цитируемый пост)
если хочу сделать инициализацию этого модуля с параметрами 
или например добавить в главной форме к этому модулю еще какой-то Control (myModule.Element.Controls.Add(myButton))
то при работе в дизайнере VS эти строки удаляются.

Просто не надо добавлять вашу инициализацию в генерируемый дизайнером кусок, добавляйте в .cs файл с именем формы (Form1.cs) и там, после InitializeComponent()  добавляйте ваш код.

Цитата(Track @  9.10.2013,  19:31 Найти цитируемый пост)
А какие методы вы используете при разработке сложных форм?

Всё тот же UserControl, дополнительно закрытый интерфейсом (если в проекте применяется MVP). Для небольших компонентов, с четкой задачей иногда больше подходит наследование от стандартных контролов и добавление своего функционала (например какой-нибудь свой экзотический NumericUpDown).
Это что касается WinForms. В WPF также добавляется выделение большей части визуального представления контролов в шаблоны и стили. В итоге логика контола может быть переиспользована с другим представлением. В общем использую преимущественно декомпозицию структурную, в отдельных случаях прибегая к наследованию от стандартных компонентов.


Это сообщение отредактировал(а) dzaraev - 10.10.2013, 07:51
--------------------
Если вопрос решён - помечайте тему.  
PM MAIL   Вверх
Track
Дата 10.10.2013, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо!
Вот википедия подкинула пару статей Фаулера на тему GUI.
Пошел читать. smile
PM MAIL WWW   Вверх
dzaraev
Дата 11.10.2013, 07:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Незачто. Напомню на всякий случай, что MVP шаблон применяется в основном для GUI библиотек, подобных WinForms, MFC и т.д.. 
А для WPF и подобных фреймворков гораздо более подходящим является MVVM.
--------------------
Если вопрос решён - помечайте тему.  
PM MAIL   Вверх
Zadnica
Дата 21.10.2013, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Track @ 9.10.2013,  19:31)
Если что-то надо отрабатывать на главной форме, то открываю доступ через public или internal.

Это же нарушение инкапсуляции! Кто у вас такой код принимает???


PM MAIL   Вверх
Track
Дата 31.10.2013, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здесь в первом посте пример кода
как разрешить редактирование компонентов UserContol в дизайнере

http://www.gotdotnet.ru/forums/3/48474/238347/#post238347
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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