2010-09-25 11 views
20

Ho un pannello contenente un DataGridView e 3 pulsanti nella parte inferiore di un modulo. Voglio aggiungere la possibilità di espandere e comprimere questo pannello. C'è un modo per farlo in un'applicazione Windows Form?Aggiungere un espansore (comprimi/espandi) a un pannello WinForm

Qualcuno ha fatto qualcosa di simile?

+0

Ho trovato questo fantastico pannello Rich: http://jfblier.wordpress.com/2008/12/10/rich-panel-with-expander/ – aleroot

risposta

39

Il controllo SplitContainer ha la possibilità di comprimere uno dei due pannelli. È possibile configurare un pulsante per la proprietà Panel1Collapsed.

+0

o agganciare panel2collapsed =! Panel2collapsed sull'evento panel1_clicked –

15

Date un'occhiata al mio WinForm controllo di espansione - https://github.com/alexander-makarov/ExpandCollapsePanel

In generale, deve soddisfare tutti i requisiti di base per questo tipo di controllo.

  • Facile modifica nel Form Designer
  • mettere qualsiasi controllo che si desidera nella regione contenuti
  • applicare stili diversi e dimensioni

Easy editing in Form Designer

4

Un'alternativa all'utilizzo del crollo SplitContainer è a:

Mettere in bacino la padella el, dove vorresti, e poi cambia è Visible proprietà per mostrarlo/nasconderlo. In questo modo altri oggetti ancorati si sposteranno per riempire lo spazio quando è invisibile (a seconda dell'impostazione Dock).

Ad esempio, se il pulsante, il pannello e un'etichetta sono tutti agganciati verso l'alto (in questo ordine) quando si nasconde il pannello, l'etichetta si sposta verso l'alto fino a sotto il pulsante.

0

Impossibile ottenere «SplitContainer» funzionante (non ricordo i dettagli, ma ho avuto problemi), così oggi sono andato dritto con questa funzione per farlo manualmente. Per comprimere il controllo passare un argomento negativo come «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; 
     } 
    } 

Ho appena inserito un'etichetta su groupBox e ho aggiunto questa funzione all'evento «onClick» dell'etichetta. E per rendere più chiara l'abilità di espansione per gli utenti, ho aggiunto all'inizio del testo il carattere .

Problemi correlati