可折叠面板






2.18/5 (3投票s)
使用 VB.NET 实现的可展开和可折叠面板
- Sample3 - 29.8 KB
- Sample2 - 30.7 KB
- Sample1 - 18 KB
- 下载 CollapsiblePanel.dll - 5.8 KB
- 下载 Collapsible-Panels - 107 KB
引言
我需要在一个窗体上显示多个具有相关但独立功能的面板。单独来看,每个面板会包含不同的控件,但每个面板都与窗体的整体范围相关。由于每个面板显示时可能需要不同的空间,因此在不使窗体过于杂乱和混乱的情况下,我能在一个窗体上显示的面板数量将受到限制。除非这些面板可以折叠到最小尺寸并重新展开到正常尺寸。我需要能够折叠和展开的面板控件。
背景
当我使用 Microsoft Visio 2003 和 Microsoft Visual Studio 2003 时,产生了折叠面板的想法。我注意到 Visio 包含了我想要的侧边面板,它们可以像我期望的那样折叠和展开,并且类似地,Visual Studio 提供了一个大纲功能,可以折叠和展开代码区域。我需要同样的功能,只是应用于面板。
所以,我知道我想要的功能存在,但我不知道如何实现它,或者是否存在一个封装它的控件。
这些都是非常好的解决方案,任何一个都可以工作,但 jeffb42 的 Collapsible Group Box 和 Expanding panel 更适合我的应用程序的需求和展示风格。唯一的问题是,我需要 VB.NET 版本的代码 - 而不是 C#。所以,我必须进行转换。
代码包含一个我不需要的 Trashcan 功能,所以在转换他的 C# 代码时,我删除了 Trashcan 图标和功能。这是一个很棒的主意,感谢 Jeff 提供了这个功能,但它对我来说是多余的。我还重命名了项目、文件名和一些方法,以匹配我偏好的术语。
为了证明转换成功,我使用我转换后的 VB.NET 代码复制了他的测试应用程序。
此外,我添加了一个 Minimize()
方法,以便最初以最小化状态显示面板。现在,我可以垂直显示多个面板 - 像列表一样 - 在窗体上。
每个面板在展开时都会根据需要滚动。
以垂直方式显示面板并按需展开,满足了我将许多相关面板显示在单个窗体上而不影响窗体外观的要求。
Using the Code
再次感谢 jeffb42 在他的文章中提供了出色的文档。我不会试图改进他的文档,但我会总结设置和使用代码所需的步骤。由于代码是作为用户控件构建的,您需要完成一些额外的步骤才能使用它。
首先,将 **CollapsiblePanel** 控件添加到 Visual Studio 的工具箱中。
- 打开一个窗体
- 从工具箱中选择 **我的用户控件**
- 右键单击工具箱,然后选择 **添加/删除项…** 菜单项
- 在 **自定义工具箱** 对话框显示后,选择 **浏览…** 按钮,然后导航到包含 CollapsiblePanel.dll 的目录。
- 选择 CollapsiblePanel.dll。
新控件应在工具箱中可见。
注意:您可能需要关闭并重新打开解决方案才能使控件显示。
将 CollapsiblePanel
控件添加到工具箱后,创建一个派生自 CollapseGroupBox
的类,并向其中添加一些标准的 WinForm 控件。通常,标准的 WinForm 控件会添加到 CollapseGroupBox
,然后 CollapseGroupBox
会被添加到 CollapsePanel
。
类关系
标准 Winform 控件 -> CollapseGroupBox -> CollapsePanel
- 在解决方案资源管理器中,右键单击项目,然后选择 **添加->用户控件…** (或 **添加继承控件…**)
- 编辑生成的类。将基类从
System.Windows.Forms
更改为CollapseGroupBox
**Public Class** MyUserControl **Inherits** CollapseGroupBox
- 保存新继承的控件,然后切换到设计视图。
- 从工具箱向继承的窗体添加一些标准的 WinForm 控件。保存它。
- 打开项目的 MianForm 并从工具箱中拖放一个
CollapsePanel
控件。 - 编辑 MainForm 的代码,将(从上述步骤中)继承的类添加到
CollapsePanel
。Public Sub New() MyBase.New() 'This call is required by the Windows Form Designer. InitializeComponent() CollapsePanel1.Add(new MyUserControl ()) End Sub
- 编译并运行。
关注点
如前所述,我添加了一个 Minimize()
方法,以便最初以最小化状态显示面板。
Public Sub Minimize()
要使用它,只需在显示 CollapseGroupBox
对象之前调用它即可。
Dim myControl As MyUserControl = New MyUserControl()
myControl.Minimize()
由于默认情况下面板会显示为展开状态,所以我通过模拟点击事件来实现 Minimize()
功能。请参阅代码了解详情。
类关系
下面是一个简单的类图,显示了项目中类的关系。
未来的增强
由于我转换了代码,相同或类似的问题和增强也适用于我的代码。目前,我没有具体的增强代码的计划 - 只是在我的特定应用程序(们)中出现时修复任何存在的 bug。如果需要增强应用程序,我也会这样做,但目前,代码在我需要的应用程序(们)中运行得令人满意。
历史
- 2024年2月15日:初始版本