Добавить расширитель (свернуть / развернуть) в панель WinForm - PullRequest
25 голосов
/ 25 сентября 2010

У меня есть панель, содержащая DataGridView и 3 кнопки в нижней части формы.Я хочу добавить возможность развернуть и свернуть эту панель.Есть ли способ сделать это в приложении Windows Forms?

Кто-то сделал что-то подобное?

Ответы [ 5 ]

40 голосов
/ 25 сентября 2010

Элемент управления SplitContainer имеет возможность свернуть одну из двух своих панелей. Вы можете подключить кнопку к свойству Panel1Collapsed.

20 голосов
/ 27 сентября 2013

Посмотрите на мой элемент управления WinForm - https://github.com/alexander-makarov/ExpandCollapsePanel

В целом, оно должно соответствовать всем основным требованиям для этого вида контроля.

  • Простое редактирование в конструкторе форм
  • Поместите любой элемент управления в область содержимого
  • Применение разных стилей и размеров

Easy editing in Form Designer

11 голосов
/ 28 марта 2011

Есть еще один расширитель WinForms: http://jfblier.wordpress.com/2011/02/16/window-form-expander/

4 голосов
/ 27 сентября 2013

Альтернативой использованию коллапса SplitContainer является:

Закрепите панель там, где вы хотите, и измените ее Visible свойство показать / скрыть Таким образом, другие закрепленные предметы будут перемещаться, чтобы заполнить пространство, когда оно невидимо (в зависимости от их настройки Dock).

Например, если кнопка, панель и метка все пристыкованы к вершине (в таком порядке), когда вы скрываете панель, метка сместится вверх под кнопку.

0 голосов
/ 21 ноября 2014

Я не мог заставить «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» метки. И чтобы сделать расширение более понятным для пользователей, я добавил в начале текста символ .

...