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