J'ai un panneau contenant un DataGridView et 3 boutons au bas d'un formulaire. Je veux ajouter la possibilité de développer et de réduire ce panneau. Y a-t-il un moyen de le faire dans une application Windows Forms?
Est-ce que quelqu'un a fait quelque chose de similaire?
Il existe un autre WinForms Expander: http://jfblier.wordpress.com/2011/02/16/window-form-expander/
Le contrôle SplitContainer
a la capacité de réduire un de ses deux panneaux. Vous pouvez configurer un bouton pour la propriété Panel1Collapsed
.
Jetez un coup d’œil à mon contrôle d’extension WinForm - https://github.com/alexander-makarov/ExpandCollapsePanel
En général, il doit répondre à toutes les exigences de base pour ce type de contrôle.
Une alternative à l’utilisation de SplitContainer collapse consiste à:
Placez le panneau à l'emplacement souhaité, puis modifiez le paramètre Visible
propriété à afficher/masquer. De cette façon, les autres éléments ancrés bougeront pour remplir l'espace quand il est invisible (en fonction de leur paramètre Dock
).
Par exemple, si le bouton, le panneau et une étiquette sont tous ancrés vers le haut (dans cet ordre) lorsque vous masquez le panneau, l'étiquette se déplacera sous le bouton.
Je ne pouvais pas utiliser «SplitContainer» (je ne me souviens pas des détails, mais j'ai eu des problèmes) , donc aujourd'hui, je suis allé directement à cette fonction pour le faire manuellement. Pour réduire le contrôle, passez un argument négatif sous la forme «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;
}
}
Je viens de mettre une étiquette sur groupBox et j'ai ajouté cette fonction à l'événement «onClick» de l'étiquette. Et pour rendre les possibilités d'expansion plus claires pour les utilisateurs, j'ai ajouté au début du texte le caractère ⇘
.