将扩展器(折叠/展开)添加到Panel WinForm

时间:2010-09-25 18:30:10

标签: c# winforms expander

我有一个面板,其中包含一个DataGridView和一个表单底部的3个按钮。我想添加扩展和折叠此面板的可能性。有没有办法在Windows窗体应用程序中执行此操作?

有人做过类似的事吗?

5 个答案:

答案 0 :(得分:40)

SplitContainer控件可以折叠其两个面板中的一个。您可以使用Panel1Collapsed属性的按钮。

答案 1 :(得分:20)

看看我的WinForm扩展器控件 - https://github.com/alexander-makarov/ExpandCollapsePanel

一般来说,它必须满足这种控制的所有基本要求。

  • 在表单设计器中轻松编辑
  • 将您想要的任何控件放入内容区域
  • 应用不同的样式和尺寸

Easy editing in Form Designer

答案 2 :(得分:10)

答案 3 :(得分:4)

使用SplitContainer崩溃的替代方法是:

将面板停靠在您希望的位置,然后将其更改为Visible     显示/隐藏它的属性。这样,其他停靠的项目会在不可见时移动以填充空间(取决于他们的Dock设置)。

例如,如果隐藏面板时按钮,面板和标签都停靠在顶部(按此顺序),则标签将向上移动到按钮下方。

答案 4 :(得分:0)

我无法让«SplitContainer»工作(不记得细节,但我遇到了麻烦),所以今天我直接用这个功能手动完成。要折叠控件,请将负参数传递为«the_sz»。

    /// <summary>
    /// (In|De)creases a height of the «control» and the window «form», and moves accordingly
    /// down or up elements in the «move_list». To decrease size pass a negative argument
    /// to «the_sz».
    /// Usually used to collapse (or expand) elements of a form, and to move controls of the
    /// «move_list» down to fill the appeared gap.
    /// </summary>
    /// <param name="control">control to collapse/expand</param>
    /// <param name="form">form to get resized accordingly after the size of a control
    /// changed (pass «null» if you don't want to)</param>
    /// <param name="move_list">A list of controls that should also be moved up or down to
    /// «the_sz» size (e.g. to fill a gap after the «control» collapsed)</param>
    /// <param name="the_sz">size to change the control, form, and the «move_list»</param>
    public static void ToggleControlY(Control control, Form form, List<Control> move_list, int the_sz)
    {
        //→ Change sz of ctrl
        control.Height += the_sz;
        //→ Change sz of Wind
        if (form != null)
            form.Height += the_sz;
        //*** We leaved a gap(or intersected with another controls) now!
        //→ So, move up/down a list of a controls
        foreach (Control ctrl in move_list)
        {
            Point loc = ctrl.Location;
            loc.Y += the_sz;
            ctrl.Location = loc;
        }
    }

我只是在groupBox上添加了一个标签,并将此功能添加到标签的«onClick»事件中。为了让用户更清楚地了解扩展能力,我在文本的开头添加了字符