8

我对 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.differpla.net/content/2005/02/implementing-wizard-c(与上面相同但更早的工作)

4

3 回答 3

6

我会使用 TabControl 来“模拟”一个向导(请注意,我个人没有在 Windows Mobile/Compact FrameWork 上下文中使用 TabControl,但它被 Microsoft 正式列为“Windows CE、Windows Mobile for掌上电脑。”请参阅:TabControl

如果您想创建类似向导的用户体验,在 WinForms 中有一个隐藏选项卡的简单技巧:在 Form 'Load 事件中,将 Tabcontrol 的 Region 设置为 TabControl 的 DisplayRectangle。

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

如果这对您有用,它将为您节省大量移动“用户控件”或“面板”的麻烦,并且您可以在设计时以可视模式设计您的 TabPage,然后以您认为最好的任何方式控制从 TabPage 到 TabPage 的导航.

如果您想将选项卡恢复到视图中,您可能希望在 Form 'Load 事件中“快照”TabControl 的原始区域。

这是一个简单的例子:一种“单向”从头到尾的模型:

定义一个字典,其中每个 Key 是一个 TabPage,每个 Key 条目的布尔值控制您是否允许用户导航到该 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;

此模型中的导航控件意味着您需要将下一个 TabPage 的布尔值设置为 '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];
}
于 2010-03-12T16:14:35.923 回答
3

我非常倾向于为此使用 DI/IoC 容器(特别是我会使用这个,但几乎它们中的任何一个都应该工作)。

我会创建一个作为应用程序“主机”的 MainForm。在那个 MainForm 上,我会放置一个 DeckWorkspace 或 TabWorkspace,这取决于您希望用户如何导航。如果您只想允许前进/后退,我会选择甲板工作区。如果允许他们跳过几个步骤,TabWorkspace 可能会更有意义。

然后,我会在 MainForm 中添加几个按钮作为导航按钮。

然后,我将为每个向导页面创建一个 SmartPart(视图)。在底层这些是用户控件,但它们是 Wor4kspaces 知道如何使用的东西。

然后,我将创建一个 WizardService,其中包含一个状态机,用于对导航有效的内容、SmartParts 为前进/后退显示的内容等。

然后,我会为每个 SmartPart 创建 Presenter,以将 View 连接到 WizardService,或者只为整个事情创建一个 Presenter。这在很大程度上取决于向导数据的复杂性以及一步一步的数据之间的关系。

接下来,我将为导航按钮连接事件。这些事件将发送到 WizardService,它会处理确定我们需要导航到哪里并联系演示者,然后演示者将显示和填充适当的视图。

编辑

我已经整理了一个在 WinMo/WEH 上运行的向导的可靠工作示例。完全相同的代码在 Windows CE 甚至桌面上都可以正常工作。 请参阅我的博客以获得一些解释或直接从Codeplex 项目的变更集中提取代码。

于 2011-08-24T14:40:02.573 回答
1

关于选择“UserControls”或“Multiple Forms”:

两者都可以,但 MainForm + UserControls 更容易。

另请参阅:在 C# 中创建具有多个屏幕的 Windows Mobile 应用程序的最佳方法是什么

于 2010-03-12T15:55:23.880 回答