Я бы не пошел по пути создания 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 - нет, что является основной проблемой.
Ах, но если вы используете фреймворк вокруг этих UserControls, вы можете создать свое собственное событие Load. – ctacke
Бах, я даже не использую * controls * больше - я просто «BitBlt» на экране. :) – MusiGenesis
О, у меня есть одна форма с 47 UserControls for Views. Но интересно то, что у меня есть один настраиваемый элемент управления, который используется для отображения * каждого * элемента пользовательского интерфейса на каждом представлении. В основном, чтобы получить требуемый алфавитный список, в котором я нуждался, я просто сделал «швейцарский армейский нож», смешал его с пользовательской живописью и оставил все остальное в панели инструментов. Ах, радости развития CF. – ctacke