Как бороться с .NET TabPage все элементы управления в одном классе Form? - PullRequest
3 голосов
/ 26 сентября 2008

Я хотел бы структурировать форму с помощью TabControl, но я бы хотел, чтобы каждый элемент управления на каждой вкладке не становился членом формы, к которой я добавляю TabControl. Пока я определил эти варианты, пожалуйста, прокомментируйте или предложите альтернативы:

1) Напишите UserControl для каждой вкладки

2) Оставьте только элемент управления в главной форме, но сделайте переменную управления общедоступной и обрежьте и вставьте весь текущий код в отдельные классы

3) Откажитесь от дизайнера форм и сделайте все во время выполнения

4) Получите из Tabpage (не уверен, что это работает и каковы последствия времени разработки)

Спасибо всем,

Andrew

Ответы [ 2 ]

3 голосов
/ 26 сентября 2008

В любом сложном приложении WinForms вы, вероятно, столкнетесь с проблемой слишком большого количества элементов управления в форме. Не то чтобы вы столкнулись с жестким ограничением, скорее вы столкнетесь с болевым моментом - таким, как вы описываете.

В большинстве сценариев для меня вариант № 1 - пользовательский элемент управления для каждой вкладки - наименее болезненный подход. Это позволяет вам инкапсулировать логические разбивки элементов управления по-своему, определяя их соответствующим образом.

Недостатком этого является то, что вы, вероятно, в конечном итоге выставите либо тонна свойств на свой пользовательский элемент управления. Однако выход из этой проблемы довольно прост: используйте пользовательский класс для представления данных, которые «привязаны» к указанному элементу управления, а затем предоставьте одно свойство для связанного экземпляра класса.

В целом у вас будет лучшая архитектура, вы будете более удобны в обслуживании, и в качестве дополнительного бонуса вы не будете сходить с ума, пытаясь заставить форму работать. :)

EDIT:

Я должен отметить, что вам также может понадобиться предоставить некоторые пользовательские события из пользовательских элементов управления, которые представляют ваши вкладки. По сути, если на вкладке есть элемент управления, событие которого необходимо для родительской формы, вам придется создать событие и вызвать его так, чтобы родительская форма знала об этом. Это не очень сложно, но может добавить значительные LOC для пользовательских элементов управления.

2 голосов
/ 26 сентября 2008

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

Вариант 2 - плохая идея, потому что если вы захотите изменить макет, дизайнер сгенерирует новый код, и ваша вырезка должна быть исправлена ​​вручную.

Вариант 3 будет в 10 раз больше работы, чем использование дизайнера для организации макета.

Вариант 4 не имеет никаких преимуществ по сравнению с UserControl, но вам нужно внести некоторые изменения в класс TabPage, чтобы он мог работать в качестве области проектирования.

Так что я бы придерживался варианта 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...