我对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(与上述相同,但早期工作)
答案 0 :(得分:6)
我会使用TabControl来“模拟”向导(请注意,我没有亲自在Windows Mobile / Compact FrameWork上下文中使用TabControl ,但它是 Microsoft正式列为“Windows CE,Windows Mobile for Pocket PC”的FrameWork的一部分。请参阅:TabControl
在WinForms中,如果要创建类似向导的用户体验,可以轻松隐藏选项卡:在Form'Load事件中,将Tabcontrol的Region设置为TabControl的DisplayRectangle。
tabControl1.Region = new Region(tabControl1.DisplayRectangle);
如果这对您有用,它将为您省去移动'UserControls'或'面板'的麻烦,您可以在设计时以可视模式设计TabPages,然后以任何方式控制从TabPage到TabPage的导航你认为最好。
如果您想要将选项卡还原到视图中,您可能希望在“加载”事件中“快照”TabControl的原始区域。
以下是一种快速举例说明:一种“单向”的从头到尾的模式:
定义一个字典,其中每个Key都是一个TabPage,每个Key条目的布尔值控制是否允许用户导航到该TabPage。
// allocate the Dictionary
Dictionary<TabPage, bool> CanNavigateDict = new Dictionary<TabPage, bool>();
你想要“通过在Form Load事件中做这样的事情来准备那个词典:
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];
}
答案 1 :(得分:3)
我非常倾向于使用DI / IoC容器(特别是我使用this one,但几乎任何一个都可以使用)。
我创建了一个MainForm,它是应用程序的“主机”。在那个MainForm上,我会放置DeckWorkspace或TabWorkspace,具体取决于您希望用户如何导航。如果你只想允许前进/后退,我会选择一个deckworkspace。如果允许他们跳过几个步骤,TabWorkspace可能会更有意义。
然后我会在MainForm中添加几个按钮作为导航按钮。
然后,我会为每个向导页面创建一个SmartPart(视图)。这些是UserControls,但它们是Wor4kspaces知道如何使用的东西。
然后我创建一个WizardService,其中包含一个状态机,用于导航有效,SmartParts为前进/后退显示的内容等。
然后我会为每个SmartPart创建演示者,以便将视图连接到WizardService,或者只为整个事件连接一个Presenter。这很大程度上取决于向导数据的复杂性以及步骤之间的数据是如何相关的。
接下来,我会为导航按钮连接事件。这些事件将转到WizardService,它将处理确定我们需要导航到的位置并联系演示者,演示者将显示并填充相应的视图。
修改强>
我已经在WinMo / WEH上运行了一个可靠的工作示例。完全相同的代码可以在Windows CE甚至桌面上正常工作。 See my blog获取一些解释或从the Codeplex project's changesets开始直接提取代码。
答案 2 :(得分:1)
关于选择“UserControls”或“Multiple Forms”:
两者都可以,但MainForm + UserControls更容易。
另见:What's the best way to create a Windows Mobile application with multiple screens in C#