Когда целесообразнее использовать различные формы, а когда — осуществлять смену элементов управления
Для облегчения навигации в пределах пользовательского интерфейса можно использовать два способа: 1) вызывать новые формы в ответ на действия пользователя, и 2) показывать или скрывать элементы управления на единственной форме. Оба эти способа могут служить механизмами показа пользователю нового экрана, заполненного информацией.
Вы не сделаете ничего плохого, если для манипулирования информацией, требующей нескольких экранов, используете одну-единственную форму, и будете показывать на ней и скрывать элементы управления в соответствии с необходимостью. Вы должны хранить такие многоэкранные элементы пользовательского интерфейса в одной форме в том случае, если они представляют родственные понятия и вам может потребоваться настройка связей между ними. Переместить информацию с одного "экрана" на другой легче, если управление ими реализовано в пределах одного и того же класса.
Разделять же функциональность между различными формами следует тогда, когда она действительно состоит из различных частей, а вероятность того, что в процессе настройки пользовательского интерфейса вы захотите переносить его элементы из одной формы в другую, мала. Эта мера позволяет уменьшить скученность элементов управления на экране.
Если экран вашего целевого мобильного устройства достаточно большой, то в качестве промежуточного решения, позволяющего добиться определенного компромисса, могут использоваться вкладки. Обычно каждую отдельную вкладку следует концептуально рассматривать как отдельную форму. Использование вкладок обладает тем замечательным преимуществом, что при этом вы не должны отображать или скрывать каждый экран вручную; это автоматически делает за вас среда выполнения. Рассмотрите возможность помещения кода обработчиков событий для содержимого каждой из вкладок в отдельные классы. Тем самым будет обеспечена надежная инкапсуляция кода, делающая его менее запутанным.
Разработка улучшенных пользовательских интерфейсов средствами .NET Compact Framework
.NET Compact Framework предлагает некоторые усовершенствованные средства, представляющие интерес для разработчиков. Поскольку эти понятия специфичны для .NET Compact Framework, они сознательно вынесены в отдельный раздел. Аналогичные возможности могут предлагать и другие среды выполнения для мобильных устройств, поэтому данный материал стоит прочитать, даже в тех случаях, когда вы работаете в одной из них.
Динамическое создание элементов управления
Возможность динамического создания элементов управления может оказаться полезной. Как показывают рис. 13.8 и листинг 13.2, в .NET Compact Framework сделать это не сложно. Динамические элементы управления удобно использовать в нескольких ситуациях:
■ Когда форма загружается очень медленно. Если форма содержит множество элементов управления или она достаточно тяжеловесна, то для ее инициализации требуется проделать большой объем работы. При создании и загрузке формы инициализируются все элементы управления, размещенные на ней во время проектирования. Все, что для этого необходимо, выполняется в функции InitializeComponent(); содержимым этой функции управляет конструктор форм, и при желании вы можете исследовать упомянутую функцию. Если вы хотите ускорить загрузку формы, то можете отложить создание элемента управления до тех пор, пока в нем не возникнет необходимости. Примечание. Вы также можете воспользоваться кодом, автоматически сгенерированным для вас в функции InitializeComponent(), и попытаться вручную оптимизировать его. Поступая таким образом, вы должны поместить собственный код в функцию с отдельным именем, которое исключит вероятность того, что по случайности она будет перекрыта функцией среды разработки. Вы также должны понимать, что теперь при проектировании своей формы вы можете лишиться помощи конструктора форм. Как и в случае любой оптимизации, вы обязательно должны получать количественную оценку ее эффективности, чтобы быть уверенным в том, что добились с ее помощью те результаты, на которые рассчитывали.
■ Когда на стадии проектирования точное количество необходимых элементов управления не известно. Например, если вашему приложению требуется массив переключателей, количество которых зависит от количества элементов, возвращаемых в результате запроса к базе данных, то вам приходится создавать этот массив во время выполнения, когда количество переключателей становится известным.
Читать дальше