构建向导的好模式?

时间:2010-03-19 20:58:26

标签: c# winforms wizard

我通常使用TabControl并以某种方式隐藏标签并浏览它们。

我很好奇其他方法!

2 个答案:

答案 0 :(得分:5)

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

存储当前面板的索引,并使用“Next”和“Previous”按钮相应地更改此索引。更改此索引后,根据需要使相应的面板可见/不可见(在给定时间只能看到当前面板)。

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

答案 1 :(得分:2)

这是一个非常复杂的话题;两年前我在内部使用了一个相当全面的Wizard控件,我记得需要几个星期才能完全正常工作。

基本要素是:

  • 标题面板
  • 内容面板
  • 行动小组
  • 边栏

内容面板和操作面板都使用ParentControlDesigner来启用删除控件。内容面板不允许您直接删除它,而是让您放在活动页面(子面板)上。操作面板还具有“默认”模式,可以创建标准的4个按钮(上一个,下一个,取消,完成)。我主要实现了自定义模式,因此我可以对它进行换肤,即使用DevEx按钮而不是标准的Winforms按钮。

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

然后API公开了一组数据结构:

  • 步骤(名称,标题等,也指明是否应在侧栏中链接)
  • 工作流程(即根据您的选择将您带到下一个地方)
  • 验证事件(同步和异步)
  • 操作(在页面更改之前/之后,按钮点击等运行)
  • 过渡效果(我这样做是为了好玩,用户喜欢'em)

我为这些步骤组合了一个自定义集合编辑器,这反过来又创建了内容面板的子面板,如上所述。每个面板都直接添加到控件集合中,但根据活动的步骤属性,一次只能看到一个面板。我记得对接似乎从未正常工作,所以我必须覆盖所有调整大小的方法。我从未尝试过创建智能标签以便在页面之间轻松翻转,但可以在属性网格上选择活动页面(或页面索引)。

然后我还必须包含一大堆钩子,用于在各个页面上插入任何自定义逻辑。如果不发布所有代码,很难真正详细了解。

正确设计和测试非常耗时,但我不记得使用任何whizbang设计技巧,只需要从各个UI元素(运行时和设计)的角度有条不紊地处理问题,如上所述-time)和数据结构以及它们如何相互作用。

请记住,所有这些都是为了创建一个可重用的Wizard组件,因为我们需要为特定应用程序开发大约10个(并且它对其他项目也很方便)。如果我只需要将一个快速向导组合在一起,我可能不会遇到所有这些麻烦,我只是做你正在做的事情 - 使用标签控件和一些流程面板。或者更好的是,我现在使用现成的向导控件,就像许多Winforms库中一样,比如DX库。