Ajouter un expander (collapse / expand) à un panneau WinForm
j'ai un panneau contenant un DataGridView et 3 boutons au bas d'un formulaire. Je voudrais ajouter la possibilité d'agrandir et d'effondrer ce panneau. Est-il un moyen de le faire dans une application Windows Forms?
quelqu'un A fait quelque chose de similaire?
5 réponses
Il y a un autre WinForms Expander : http://jfblier.wordpress.com/2011/02/16/window-form-expander/
SplitContainer
le contrôle a la capacité de faire s'effondrer l'un de ses deux panneaux. Vous pourriez monter un bouton pour l' Panel1Collapsed
propriété.
jetez un oeil à mon WinForm expander de contrôle - https://github.com/alexander-makarov/ExpandCollapsePanel
En général, il doit satisfaire à toutes les exigences de base pour ce type de contrôle.
- édition facile dans la forme concepteur
- mettez n'importe quel contrôle que vous voulez dans la région de contenu
- Appliquer différents styles et tailles
Une alternative à l'utilisation de l' SplitContainer effondrement est:
Ancrer le panneau, à l'endroit où vous le voulez, et ensuite de le modifier Visible
propriété pour afficher/cacher. De cette façon, d'autres ancrée éléments vont pour remplir l'espace quand il est invisible (en fonction de leur Dock
paramètre).
par exemple, si le bouton, le panneau, et une étiquette sont tous amarrés au dessus (dans cet ordre) quand vous cachez le panneau l'étiquette se déplacera vers le haut de sous le bouton.
je ne pouvais pas obtenir "SplitContainer" travail (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 passer un argument négatif comme "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 un label sur groupBox, et j'ai ajouté cette fonction à l'événement "onClick" du label. Et pour rendre la capacité d'expansion plus claire pour les utilisateurs, j'ai ajouté au début du texte le caractère ⇘
.