2010-04-30 4 views
4

Я поддерживаю приложение Windows CE, основанное на .NET Framework, которое имеет около 45 форм. Есть 5 секций, которые приводят к желаемой функции. Приложение полностью заполнено на 100%, и важно, чтобы его нельзя было свести к минимуму.Превосходные методы Compact Framework: создание графического интерфейса

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

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

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

ответ

3

Я бы не пошел по пути создания 45 форм при запуске приложения. Это серьезно сократит время запуска и, возможно, (если не возможно) исчерпает ресурсы вашей памяти, чтобы обеспечить функциональность, которую ваш пользователь может даже не понадобиться.

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

Если ваши формы занимают больше времени, чем показано, возможно, существует проблема с извлечением данных или с тем, как данные загружаются в элементы формы (например, у вас может быть собственный элемент управления gridview, который полностью отображает все 300 строк, хотя одновременно видно только 12). Если ваши данные настолько велики, что законно требуется много времени для извлечения, скорее всего, это гораздо больше данных, чем пользователь может практически взаимодействовать.

Я предполагаю, что ваше упоминание о «5 разделах», чтобы добраться туда, куда должен идти пользователь, означает, что они могут (максимально) «сверлить» 5 уровней на что-то. Если вы внедрили это, создав каждую форму и покажите следующую форму, используя ShowDialog, у вас будет не более 5-6 форм, существовавших в любой момент времени, что не должно быть проблемой для приложения .Net CF (я делаю это все время). Таким образом, вам не нужно делать ничего особенного, чтобы отслеживать, какая форма должна отображаться, когда вы просто открываете форму где бы то ни было, а когда форма закрыта, вы автоматически возвращаетесь в вызывающую форму.

Существует определенная странность, связанная с z-order/task manager, с которой вам приходится иметь дело, но это не особенно сложно. Перед вызовом ShowDialog в дочерней форме вы устанавливаете свойство родительской формы Text пустой строкой, а затем возвращаете ее обратно к исходной надписи формы после возврата ShowDialog. Это не обязательно, но в Windows Mobile (по крайней мере, до версии 6) все открытые формы .Net (с нечетким текстовым свойством) отображаются в списке Running Programs, даже если все они из одного и того же заявление. Обычно мне нравится, что мои многоформатные приложения выглядят как одна программа, поэтому я обычно устанавливаю Text каждой формы на имя приложения).

Я также экспериментировал с однообразным приложением, которое реализует каждый фрагмент пользовательского интерфейса как UserControl вместо формы, а затем создает и складывает элементы управления так, как если бы вы создавали и открывали формы. Это работает, но это взлом, и я не рекомендую его. У форм есть событие Load, а UserControls - нет, что является основной проблемой.

+1

Ах, но если вы используете фреймворк вокруг этих UserControls, вы можете создать свое собственное событие Load. – ctacke

+0

Бах, я даже не использую * controls * больше - я просто «BitBlt» на экране. :) – MusiGenesis

+0

О, у меня есть одна форма с 47 UserControls for Views. Но интересно то, что у меня есть один настраиваемый элемент управления, который используется для отображения * каждого * элемента пользовательского интерфейса на каждом представлении. В основном, чтобы получить требуемый алфавитный список, в котором я нуждался, я просто сделал «швейцарский армейский нож», смешал его с пользовательской живописью и оставил все остальное в панели инструментов. Ах, радости развития CF. – ctacke

3

В процессе существует целая переменная переменных, поэтому методологии единого размера не существует. Конечно, загрузка всех Форм изначально означает, что межстраничная навигация быстрая, но она замедляет загрузку, а также может вывести вас из памяти.

Моя общая методология заключается в использовании рамки - лично я поклонник OpenNETCF IoC framework, но тогда я, вероятно, предвзято.

В любом случае, вам нужна общая основа, которая делает две вещи:

  1. отделяющих Просмотры от модели (должны ли эти взгляды быть Формируют, CFontrols пользователей, панель или что полностью спорен).
  2. Дорожки, что точка зрения на первом плане, и какой вид должен быть «рядом» (будь вы двигаетесь formaward или назад)

Я сделал простую рамочную статью на этой ages ago for MSDN. Я обновил его, чтобы использовать более чистый MVC отдельный и IoC framework more recently.

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

Трудно дать вам более тонкие предложения, чем это, потому что мы действительно не знаем, каковы ваши требования или ограничения. Если вы работаете на медленном устройстве ARM с очень ограниченной памятью и множеством графических элементов, я бы, конечно, атаковал некоторые вещи по-другому (кеширование, ленивая загрузка и т. Д.), Чем встроенное устройство x86 для pentium-класса с гигабайтом оперативной памяти.

EDIT

Вы увидите, что разница между тем, как MusiGenesis и я бы атаковать это подчеркивает тот факт, что нет никакого «правильного» пути. Когда мы говорим, я делаю код для полноэкранного встроенного приложения, имеющего 47 просмотров, и проект содержит одну и только одну форму. Вероятно, он использовал 47 разных Форм. Оба выполняют задание. Общность заключается в том, что у нас обоих есть некоторая форма базовой инфраструктуры, которая имеет дело со всем, что требуется, чтобы знать, что должно быть на вершине. Он полагается на ShowDialog, выбирая собственный z-порядок Форм. Я полагаюсь на пользовательскую структуру, которая запоминает, откуда вы пришли.

Опять же, это только подчеркивает, что нет правильного или неправильного - до тех пор, пока оно отвечает требованиям проекта.

+0

Фактически, * I * будет делать это по-своему, если бы я начинал с нуля. Мой метод - это взлом, который обязательно сломается с новой версией Windows Mobile (при условии, что будут новые версии). Это может быть немного легче для новичка, хотя, поскольку это больше похоже на обычное программирование на Windows (если это хорошо). – MusiGenesis

Смежные вопросы