Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Сложные GUI с большим количеством элементов


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

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

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

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

Автор: dzaraev 10.10.2013, 07:48
Цитата(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 также добавляется выделение большей части визуального представления контролов в шаблоны и стили. В итоге логика контола может быть переиспользована с другим представлением. В общем использую преимущественно декомпозицию структурную, в отдельных случаях прибегая к наследованию от стандартных компонентов.

Автор: Track 10.10.2013, 19:44
Спасибо!
Вот http://ru.wikipedia.org/wiki/Model-View-Presenter подкинула пару статей Фаулера на тему GUI.
Пошел читать. smile

Автор: dzaraev 11.10.2013, 07:19
Незачто. Напомню на всякий случай, что MVP шаблон применяется в основном для GUI библиотек, подобных WinForms, MFC и т.д.. 
А для WPF и подобных фреймворков гораздо более подходящим является MVVM.

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

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


Автор: Track 31.10.2013, 20:34
Здесь в первом посте пример кода
как разрешить редактирование компонентов UserContol в дизайнере

http://www.gotdotnet.ru/forums/3/48474/238347/#post238347

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)