web-dev-qa-db-fra.com

Ajouter un expandeur (réduire/développer) à un Panel WinForm

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?

25
aleroot
10
Jack

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.

40
Bradley Smith

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.

  • Édition facile dans le concepteur de formulaire 
  • Placez n'importe quel contrôle de votre choix dans la région de contenu 
  • Appliquer différents styles et tailles 

Easy editing in Form Designer

20
Alexander Makarov

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.

4
noelicus

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 .

0
Hi-Angel