65.9K
CodeProject 正在变化。 阅读更多。
Home

另一个可折叠面板(超简单)

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.33/5 (6投票s)

2011 年 2 月 12 日

CPOL

2分钟阅读

viewsIcon

39740

downloadIcon

1481

一种非常简单快捷的方法来管理可折叠面板和分组框。

CollapsePanel

引言

我最近的一个项目需要以类别形式显示大量信息。由于每个组的人数不平衡,选项卡控件不可行。因此,我转向了可折叠面板和分组框,以便用户可以隐藏或显示他们所需的信息。

CodeProject 上有很多出色的可折叠控件,但我需要一个非常简单的,并且最重要的是,能够嵌套“折叠器”。我测试过的那些控件与 FlowLayoutPanelAutoSize 功能都有奇怪的交互。

我没有时间开发自定义控件,几乎是偶然的机会,我找到了这个简单的解决方案。

使用代码

需要两个元素:一个 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 引用到按钮的父级(PanelGroupBox 都可以)。这意味着按钮必须明显位于 PanelGroupBox 内部。我习惯将其放置在右上角,并将 Anchor 属性从默认的 Top,Left 值更改为 Top,Right
  • chk 引用到按钮本身。这允许将相同的代码放置到尽可能多的按钮中。现在可以说我没有使用 Button,而是使用外观为 ButtonCheckBox

你只需要将代码复制到你需要的第一个折叠按钮。然后根据需要复制粘贴。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 的。

© . All rights reserved.