Как реализовать мастер создания приложения для Windows Mobile? - PullRequest
8 голосов
/ 12 марта 2010

Я немного новичок в разработке для Windows Mobile (с C # и компактной структурой), поэтому я не совсем уверен, как это сделать. Пользователь должен просмотреть несколько страниц информации в манере, подобной волшебству. В начале есть окно входа в систему.

Как бы я поступил и реализовал это? Буду ли я иметь разные пользовательские элементы управления для каждой страницы и создавать / показывать и уничтожать / скрывать их по запросу? Или мне нужно создавать разные формы и как-то их показывать?

РЕДАКТИРОВАТЬ (от другого пользователя, чем OP)

Поскольку я также не нашел хорошего решения для этого, а ссылки из некоторых ответов не могут быть использованы в Windows Mobile 6.5, я начинаю вознаграждение

Они выглядят многообещающе, но могут быть построены для мобильных устройств 6.5

http://weblogs.asp.net/justin_rogers/articles/117859.aspx

http://www.codeproject.com/KB/dialog/WizardForm.aspx

http://www.codeproject.com/KB/miscctrl/DesignTimeWizard.aspx

http://winformswizard.codeplex.com/

http://www.differentpla.net/content/2005/02/implementing-wizard-c (то же, что и выше, но с более ранними работами)

Ответы [ 3 ]

6 голосов
/ 12 марта 2010

Я бы использовал TabControl для «симуляции» мастера ( обратите внимание, что я лично не использовал TabControl в контексте Windows Mobile / Compact FrameWork , но является официально зарегистрированным Microsoft в рамках FrameWork для «Windows CE, Windows Mobile для Pocket PC». См .: TabControl

В WinForms есть простой способ скрыть вкладки, если вы хотите создать подобный мастеру пользовательский интерфейс: в событии формы 'Load' установите Region of the Tabcontrol равным DisplayRectangle TabControl.

tabControl1.Region = new Region(tabControl1.DisplayRectangle);

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

Возможно, вы захотите «сделать моментальный снимок» исходного региона TabControl в событии «Загрузка формы», если вы когда-нибудь захотите восстановить вкладки.

Вот краткий пример того, как это сделать: некая «односторонняя» модель от начала до конца:

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

// allocate the Dictionary
Dictionary<TabPage, bool> CanNavigateDict = new Dictionary<TabPage, bool>();

Вы захотите «подготовить этот словарь, выполнив что-то подобное в событии загрузки формы:

foreach (TabPage theTPage in tabControl1.TabPages)
{
    CanNavigateDict.Add(theTPage, false); 
}

// show the first TabPage
tabControl1.SelectedTab = tabPage1;

Управление навигацией в этой модели означает, что вам нужно установить логическое значение следующей вкладки на «true», если каким-либо образом вы удовлетворяли критериям для завершения текущей страницы: Пример

// sample of how you control navigation in the TabControl
// by using the CanNavigate Dictionary in the TabControl 'Selecting event
private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e)
{
  e.Cancel = ! CanNavigateDict[e.TabPage];
}
3 голосов
/ 24 августа 2011

Я бы очень хотел использовать для этого контейнер DI / IoC (в частности, я бы использовал этот , но в значительной степени любой из них должен работать).

Я бы создал MainForm, которая является "хостом" приложения. На эту MainForm я бы поместил либо DeckWorkspace, либо TabWorkspace, в зависимости от того, как вы хотите, чтобы пользователю было разрешено перемещаться. Если вы хотите разрешить только вперед / назад, я бы выбрал пространство для колоды. Если им позволят прыгнуть на несколько шагов, TabWorkspace, вероятно, будет иметь больше смысла.

Затем я добавил бы в MainForm пару кнопок, которые будут кнопками навигации.

Затем я бы создал SmartPart (представление) для каждой из страниц мастера. Под капотом находятся UserControls, но они - то, что Wor4kspace знает, как использовать.

Затем я бы создал WizardService, в котором был бы конечный автомат для того, что действительно для навигации, что показывают SmartParts для перемотки вперед / назад и т. Д.

Затем я бы создал презентаторов для каждой из SmartParts, чтобы связать виды с WizardService или просто с одним докладчиком для всего этого. Это будет в значительной степени зависеть от сложности данных мастера и от того, как эти данные связаны между собой.

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

EDIT

Я собрал хороший рабочий пример мастера, работающего на WinMo / WEH. Точно такой же код будет хорошо работать на Windows CE или даже на рабочем столе. См. Мой блог для объяснения или извлеките код прямо из наборов изменений проекта Codeplex .

1 голос
/ 12 марта 2010

Относительно выбора "UserControls" или "Multiple Forms":

Оба будут работать, но MainForm + UserControls проще.

См. Также: Какой лучший способ создать приложение для Windows Mobile с несколькими экранами в C #

...