c# winforms expander

c# - Agregue un expansor(contraer/expandir) a un Panel WinForm



winforms expander (5)

Eche un vistazo a mi control de expansión WinForm - https://github.com/alexander-makarov/ExpandCollapsePanel

En general, debe cumplir con todos los requisitos básicos para este tipo de control.

  • Fácil edición en Form Designer
  • Ponga cualquier control que desee en la región de contenido
  • Aplicar diferentes estilos y tamaños.

Tengo un panel que contiene un DataGridView y 3 botones en la parte inferior de un formulario. Quiero agregar la posibilidad de expandir y contraer este panel. ¿Hay alguna manera de hacerlo en una aplicación de Windows Forms?

¿Alguien ha hecho algo similar?



No pude hacer que «SplitContainer» funcionara (no recuerdo los detalles, pero he tenido problemas) , así que hoy seguí adelante con esta función para hacerlo manualmente. Para colapsar el control pasa un argumento negativo como «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; } }

Acabo de poner una etiqueta en groupBox y agregué esta función al evento «onClick» de la etiqueta. Y para que la capacidad de expansión sea más clara para los usuarios, agregué al principio del texto el carácter .


Una alternativa al uso del colapso SplitContainer es:

Acople el panel, donde le gustaría, y luego cambie su propiedad Visible para mostrarlo / ocultarlo. De esta manera, otros elementos acoplados se moverán para llenar el espacio cuando sea invisible (dependiendo de su configuración de Dock ).

Por ejemplo, si el botón, el panel y una etiqueta están todos acoplados a la parte superior (en ese orden) cuando oculta el panel, la etiqueta se desplazará hasta debajo del botón.


El control SplitContainer tiene la capacidad de contraer uno de sus dos paneles. Podría instalar un botón en la propiedad Panel1Collapsed .