2010-03-19 87 views
7

我通常使用TabControl并以某种方式隐藏标签并在其中导航。构建向导的良好模式?

我很好奇这样做的其他方式!

+6

索伦使用了一个'RingControl'设备作为向导,但我认为它有点多。 – FrustratedWithFormsDesigner 2010-03-19 21:04:52

+0

@FrustratedWithFormsDesigner:我在哪里可以得到这样的控制? – Luiscencio 2010-03-19 23:00:59

回答

5

您可以使用一组Panel对象,除第一个面板之外的所有对象的Visible属性设置为false

存储当前面板的索引,并具有适当更改该索引的“下一步”和“上一步”按钮。当此索引更改时,根据需要使适当的面板可见/不可见(只有当前面板应该在给定时间可见)。

您还可以在某些/所有面板上处理IsVisibleChanged事件,以触发用户导航到特定面板时发生的某些行为。

2

这是一个很相关的话题;我在两年前建立了一个相当全面的Wizard控件,用于在家中使用,我记得花了几个星期才完成正确的工作。

的基本要素是:

  • 部首面板
  • 内容面板
  • Action面板
  • 边栏

两个内容面板和动作面板利用ParentControlDesigner的至启用删除控件。内容面板不会让你直接放在它上面,而是让你放在活动页面(子面板)上。操作面板还有一个“默认”模式,它在其中创建标准4个按钮(prev,next,cancel,finish)。我主要实现了自定义模式,因此我可以使用它,即使用DevEx按钮而不是标准的Winforms按钮。

标题基本上是静态的,它是一个PictureBoxLabel,图像,文本和字体可自定义。 (默认情况下,文本与页面标题相同,字体是添加了粗体风格的控件字体)。

再就是由API暴露一组数据结构的:

  • 步骤(与名称,标题等,还指定是否应该在侧边栏被链接)
  • 工作流程(即你在哪里下一个根据你的选择)
  • 验证事件(同步和异步)
  • 操作(被前运行/换页,点击按钮等)
  • 过渡短跑运动员后拍摄我做了这些为了好玩,用户喜欢他们

我把这些步骤的自定义集合编辑器放在一起,反过来创建如上所述的内容面板的子面板。每个面板只是直接添加到控件集合中,但根据活动的步骤属性,一次只能看到一个面板。我记得对接似乎没有正常工作,所以我不得不重写所有的resize方法。我从来没有想过创建一个智能标签来轻松地在页面之间翻转,但是可以在属性网格上选择活动页面(或页面索引)。

然后,我还必须包括一大堆钩子来在单个页面上插入任何自定义逻辑。很难在没有发布所有代码的情况下真正了解更多细节。

正确设计和测试是非常耗时的,但我不记得使用任何whizbang设计技巧,只能从各个UI元素的角度(如运行时和运行时设计时间)和数据结构以及它们如何相互作用。

请记住所有这些都是为了创建一个可重用的向导组件,因为我们需要为特定的应用程序开发其中约10个(并且它对于其他项目也派上用场)。如果我只需要一个快速的向导,就可能不会解决所有这些问题,我只会做你正在做的事情 - 使用一个选项卡控件和几个流程面板。或者更好的是,我现在可以使用许多Winforms库中的现成向导控件,如DX库。