C# 构建向导的好模式?

C# 构建向导的好模式?,c#,winforms,wizard,C#,Winforms,Wizard,我通常使用TabControl,以某种方式隐藏选项卡并在其中导航 我对其他的方法很好奇 可以使用对象集合,除第一个面板外,所有面板的可见属性都设置为false 存储当前面板的索引,并具有适当更改此索引的“下一步”和“上一步”按钮。更改此索引时,根据需要使适当的面板可见/不可见(在给定时间,只有当前面板应可见) 您还可以处理部分/所有面板上的IsVisibleChanged事件,以在用户导航到特定面板时触发某些行为;大约两年前,我构建了一个相当全面的向导控件用于内部,我记得需要几个星期才能完全正常

我通常使用
TabControl
,以某种方式隐藏选项卡并在其中导航


我对其他的方法很好奇

可以使用对象集合,除第一个面板外,所有面板的
可见属性都设置为
false

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


您还可以处理部分/所有面板上的
IsVisibleChanged
事件,以在用户导航到特定面板时触发某些行为;大约两年前,我构建了一个相当全面的向导控件用于内部,我记得需要几个星期才能完全正常工作

基本要素包括:

  • 标题面板
  • 内容面板
  • 行动小组
  • 边栏
内容面板和操作面板都使用
ParentControlDesigner
来启用拖放控件。内容面板不允许您直接放置在其上,而是允许您放置在活动页面(子面板)上。操作面板还有一个“默认”模式,在该模式下创建标准的4个按钮(上一个、下一个、取消、完成)。我主要实现了自定义模式,以便对其进行蒙皮,即使用DevEx按钮而不是标准的Winforms按钮

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

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

  • 步骤(带有名称、标题等,还指定是否应在侧边栏中链接这些步骤)
  • 工作流(即根据您的选择将您带到下一个位置)
  • 验证事件(同步和异步)
  • 操作(在页面更改、按钮单击等之前/之后运行)
  • 过渡效果(我做这些是为了好玩,用户喜欢)
我为这些步骤设置了一个自定义集合编辑器,它反过来为内容面板创建子面板,如上所述。每个面板只是直接添加到控件集合中,但基于active step属性,一次只能看到一个面板。我记得停靠似乎从来都不太正常,所以我必须覆盖所有的调整大小方法。我从来没有想过创建一个智能标记来轻松地在页面之间切换,但是可以在属性网格上选择活动页面(或页面索引)

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

正确地设计和测试是相当耗时的,但我不记得使用了任何whizbang设计技巧,正如前面提到的那样,我必须从单个UI元素(运行时和设计时)和数据结构以及它们如何交互的角度系统地处理问题


请记住,所有这些都是为了创建一个可重用的向导组件,因为我们需要为一个特定的应用程序开发大约10个向导组件(对于其他项目也很方便)。如果我只需要拼凑一个快速的向导,我可能不会经历所有这些麻烦,我只需要做你正在做的事情——使用一个选项卡控件和几个流面板。或者更好的是,我会使用现成的向导控件,就像现在很多Winforms库中提供的一样,比如DX库。

Sauron使用了
RingControl
设备来进行向导,但我认为它有点太多。@FrustedWithFormsDesigner:我在哪里可以获得这样的控件?