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?

24
demandé sur Uwe Keim 2010-09-25 22:30:10

5 réponses

10
répondu Jack 2016-11-15 18:55:01

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é.

40
répondu Bradley Smith 2010-09-25 18:49:51

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

Easy editing in Form Designer

18
répondu Alexander Makarov 2013-09-30 07:41:18

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.

4
répondu noelicus 2013-09-27 15:52:54

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 .

0
répondu Hi-Angel 2017-07-22 22:32:40