另一个可折叠面板(超简单)
一种非常简单快捷的方法来管理可折叠面板和分组框。
引言
我最近的一个项目需要以类别形式显示大量信息。由于每个组的人数不平衡,选项卡控件不可行。因此,我转向了可折叠面板和分组框,以便用户可以隐藏或显示他们所需的信息。
CodeProject 上有很多出色的可折叠控件,但我需要一个非常简单的,并且最重要的是,能够嵌套“折叠器”。我测试过的那些控件与 FlowLayoutPanel
和 AutoSize
功能都有奇怪的交互。
我没有时间开发自定义控件,几乎是偶然的机会,我找到了这个简单的解决方案。
使用代码
需要两个元素:一个 GroupBox
(或一个 Panel
)和一个折叠/展开 Button
。这个解决方案很简单,但是如果你需要一打或更多的折叠器怎么办?复制粘贴既不优雅,而且可能导致繁琐的调试。
可以制作一个“通用的折叠按钮”吗?是的,它就在这里。
Private Sub chkbCollapser_CheckedChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles chkbCollapser.CheckedChanged
If Not Me.Created Then Exit Sub
Dim ctrl As Control = CType(sender, Control).Parent
Dim chk As CheckBox = CType(sender, CheckBox)
If chk.Checked Then
ctrl.AutoSize = True
chk.Text = "-"
Else
ctrl.AutoSize = False
ctrl.Height = 18
chk.Text = "+"
End If
End Sub
代码中只有三个要点
Me.Created
测试,以避免在加载窗体时执行代码。ctrl
引用到按钮的父级(Panel
或GroupBox
都可以)。这意味着按钮必须明显位于Panel
或GroupBox
内部。我习惯将其放置在右上角,并将Anchor
属性从默认的 Top,Left 值更改为 Top,Right。chk
引用到按钮本身。这允许将相同的代码放置到尽可能多的按钮中。现在可以说我没有使用Button
,而是使用外观为 Button 的CheckBox
。
你只需要将代码复制到你需要的第一个折叠按钮。然后根据需要复制粘贴。Sub
标题将自动与副本的 Handle
元素一起添加。
Private Sub chkbCollapser_CheckedChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles chkbCollapser.CheckedChanged, CheckBox1.CheckedChanged, _
CheckBox5.CheckedChanged, CheckBox4.CheckedChanged, _
CheckBox3.CheckedChanged, CheckBox2.CheckedChanged, _
CheckBox8.CheckedChanged, CheckBox9.CheckedChanged, _
CheckBox13.CheckedChanged, CheckBox12.CheckedChanged, _
CheckBox11.CheckedChanged, CheckBox10.CheckedChanged
示例项目允许你查看我是如何使用 FlowLayoutPanel
以及我的可折叠 Panel
/GroupBox
的。