2009-04-21 3 views
3

Я пишу приложение на базе WinForms для Windows Mobile, ориентированное на CompactFramework 2.0 и кодирование на C#.CompactFramework 2.0 - формы против загрузки сообщений в панель

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

Мой вопрос заключается в следующем:

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

Они оба соответствуют моим потребностям, и я не знаю, есть ли здесь «правильный» ответ.

Является ли один метод более правильным, чем другой?

ответ

2

Формы - это элементы управления (просто посмотрите на цепочку наследования), а сама форма не имеет большого количества накладных расходов сама по себе. Он создает собственное окно, но это все.

Что должно принять ваше решение, так это то, как вы используете и отображаете элементы интерфейса в своем решении. Формы благоприятны для многих архитектур UI, и это то, с чем большинство разработчиков знакомо. Дизайнер поддерживает их хорошо, а создание, показ, скрытие и закрытие форм - это хорошо документированная, часто используемая парадигма, которая работает отлично. Да, у вас есть нагрузка при каждом создании формы, поскольку она создает все содержащиеся в ней элементы управления, но вы будете платить, даже если это UserControl. В любом случае необходимо создать дочерние элементы управления.

Можно утверждать, что Формы требуют, чтобы вы каждый раз их воссоздавали, но это не так. Если вы используете ShowDialog или Hide вместо Close, вы можете повторно использовать свои формы и заплатить цену один раз. Преимущество в том, что форма хранит ваши элементы управления в коллекции и управляет всем этим для вас, поэтому вам не о чем беспокоиться с GC и помните, какие у вас корни.

Парадигма UserControl более сложная - вам нужно управлять элементами управления загрузкой и разгрузкой, чтобы поддерживать низкое давление в памяти.Сложность также увеличивает стоимость затрат на поддержание, стоимость поддержки и, вероятно, затраты на разработку. Однако в некоторых сценариях есть некоторые очевидные преимущества для UserControls. Если вы используете шаблон MVC/MVP и некоторую форму фреймворка, который обрабатывает ваши представления, USerControl делает действительно хороший вид, когда форма становится рабочей областью (SCSF for the desktop - классический пример этого, а также OpenNETCF.IoC framework для CF).

Так что это «лучше»? Это зависит от того, как и где вы используете элементы, как ваша команда уже занимается разработкой, и как вы создали решение, в которое вы подключаетесь. Короче говоря, это не один правильный ответ.

0

В зависимости от сложности формы/контроля. Переход по маршруту UserControl обеспечит лучшую производительность, так как у вас не будет всех функций создания формы, с которыми вы также справитесь.

2

В моем опыте, в зависимости от вашего оборудования, элементы управления погрузкой намного превосходят запуск различных форм. Наши устройства (Motorola WT4090 с 32 мега) не имеют аппаратного ускорения, и рисование полных форм, по-видимому, действительно их утаивает. Задержка в 4-6 секунд при запуске формы; элементы управления, однако, почти мгновенные.

+0

Не уверен, почему это могло бы быть. Форма формируется из Control и, следовательно, является самим элементом управления. Это просто контейнерный контроль. На самом деле у него очень мало накладных расходов, если только дети, которых он содержит, не выполняют много работы при строительстве (и это не по вине Формы). – ctacke

+0

@ctacke Я не выше того, что мы делаем что-то очень не так, но я попытался сравнить с использованием Forms vs. Controls только с несколькими простыми текстовыми полями; аналогичные результаты. На наших устройствах, в частности, это проблема с очисткой формы previoius, а затем отображение новой полной формы. Я догадался, что улучшенная скорость связана с тем, что устройству требуется только рисовать гораздо меньший прямоугольник, и ему не нужно избавляться от предыдущего. Чисто догадывается. –

0

Мой совет - создать новую форму Windows для каждого логического действия. Если вам нужна форма, которая логически независима, лучше иметь для нее отдельную форму Windows.

Чтобы ускорить работу, вы можете создать все свои формы в начале приложения. Таким образом, у вас будет задержка при запуске приложения (большинство пользователей будут в порядке с этим), но потом все будет работать быстрее.

1

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

Если вы не видите каких-либо преимуществ в производительности в любом случае, кажется, что это было бы просто вопросом предпочтения.

1

Использование форм. Так поступают другие приложения. Это способ пользователя expexts ваше приложение для работы.

Посмотрите на предустановленное приложение «Контакты»: при запуске вы получаете список контактов. После выбора контакта новая форма открывается поверх текущего окна. Он показывает все данные контакта. При выборе «edit» из меню откроется еще одна форма, позволяющая редактировать контакт. Приложение «Задачи» ведет себя точно так же.

Значок пользователя: Щелчок где-то откроет новую форму, и закрытие этой формы вернет меня к последней форме. Вы должны работать с этим knowlegde, а не против него. Когда вы используете одну форму, пользователь может несколько раз закрывать ее, пока он действительно хочет вернуться к последней форме.

С точки зрения производительности я нахожу, что формы открываются достаточно быстро (< 1 сек) на моих WM 5 и моих устройствах WM 6.

И хотя можно достичь формы поведения с помощью UserControls, более просто использовать формы, когда вам нужно поведение формы.

Итак, моя нижняя строка: используйте формы!

P.S .: Там хорошая статья о CodeProject на: How to create MDI Application in Compact framework

+0

Все такое же поведение может быть достигнуто и с помощью UserControls. Вы привыкли к программированию в Forms, поэтому он выглядит как поведение Forms, но это не значит, что так оно и было реализовано. – ctacke

+0

@ctake: спасибо, что указали это. Я отредактировал сообщение соответственно. –