我通常使用TabControl
并以某种方式隐藏标签并浏览它们。
我很好奇其他方法!
答案 0 :(得分:5)
您可以使用Panel
个对象的集合,除了第一个面板之外的所有对象都将Visible
属性设置为false
。
存储当前面板的索引,并使用“Next”和“Previous”按钮相应地更改此索引。更改此索引后,根据需要使相应的面板可见/不可见(在给定时间只能看到当前面板)。
您还可以在部分/全部面板上处理IsVisibleChanged
事件,以触发用户导航到特定面板时发生的某些行为。
答案 1 :(得分:2)
这是一个非常复杂的话题;两年前我在内部使用了一个相当全面的Wizard控件,我记得需要几个星期才能完全正常工作。
基本要素是:
内容面板和操作面板都使用ParentControlDesigner
来启用删除控件。内容面板不允许您直接删除它,而是让您放在活动页面(子面板)上。操作面板还具有“默认”模式,可以创建标准的4个按钮(上一个,下一个,取消,完成)。我主要实现了自定义模式,因此我可以对它进行换肤,即使用DevEx按钮而不是标准的Winforms按钮。
标题基本上是静态的,它是PictureBox
和Label
,可以自定义图像,文本和字体。 (默认情况下,文本与页面标题相同,字体是控件的字体,并添加了粗体样式。)
然后API公开了一组数据结构:
我为这些步骤组合了一个自定义集合编辑器,这反过来又创建了内容面板的子面板,如上所述。每个面板都直接添加到控件集合中,但根据活动的步骤属性,一次只能看到一个面板。我记得对接似乎从未正常工作,所以我必须覆盖所有调整大小的方法。我从未尝试过创建智能标签以便在页面之间轻松翻转,但可以在属性网格上选择活动页面(或页面索引)。
然后我还必须包含一大堆钩子,用于在各个页面上插入任何自定义逻辑。如果不发布所有代码,很难真正详细了解。
正确设计和测试非常耗时,但我不记得使用任何whizbang设计技巧,只需要从各个UI元素(运行时和设计)的角度有条不紊地处理问题,如上所述-time)和数据结构以及它们如何相互作用。
请记住,所有这些都是为了创建一个可重用的Wizard组件,因为我们需要为特定应用程序开发大约10个(并且它对其他项目也很方便)。如果我只需要将一个快速向导组合在一起,我可能不会遇到所有这些麻烦,我只是做你正在做的事情 - 使用标签控件和一些流程面板。或者更好的是,我现在使用现成的向导控件,就像许多Winforms库中一样,比如DX库。