2010-09-25 19 views
20

Mam panel zawierający DataGridView i 3 przyciski na dole formularza. Chcę dodać możliwość rozwinięcia i zwinięcia tego panelu. Czy istnieje sposób, aby to zrobić w aplikacji Windows Forms?Dodaj ekspander (zwiń/rozwiń) do panelu WinForm

Czy ktoś zrobił coś podobnego?

+0

Znalazłem fantastyczny panel Rich: http://jfblier.wordpress.com/2008/12/10/rich-panel-with-expander/ – aleroot

Odpowiedz

39

Sterowanie SplitContainer ma możliwość zwinięcia jednego z dwóch paneli. Możesz podłączyć przycisk do właściwości Panel1Collapsed.

+0

lub zamknij panel2collapsed =! Panel2collapsed na zdarzeniu panel1_clicked –

15

Spójrz na moim WinForm kontroli ekspandera - https://github.com/alexander-makarov/ExpandCollapsePanel

W ogóle, musi on spełniać wszystkie podstawowe wymagania dla tego rodzaju kontroli.

  • Łatwa edycja w Form Designer
  • Put żadnej kontroli, którą chcesz do obszaru zawartości
  • zastosować różne style i rozmiary

Easy editing in Form Designer

4

alternatywą do korzystania z SplitContainer upadek to:

Dokowanie patelni el, tam, gdzie chcesz, a następnie zmień jego właściwość, aby go pokazać/ukryć. W ten sposób inne zadokowane elementy zostaną przesunięte, aby wypełnić przestrzeń, gdy jest ona niewidoczna (w zależności od ustawienia Dock).

Na przykład, jeśli przycisk, panel i etykieta są wszystkie zadokowane do góry (w tej kolejności), po ukryciu panelu etykieta przesunie się pod przycisk.

0

Nie mogłem uzyskać «SplitContainer» działającego (nie pamiętam szczegółów, ale miałem kłopoty), więc dzisiaj poszedłem prosto z tą funkcją, aby zrobić to ręcznie. Aby zwinąć, kontrola przekazuje negatywny argument jako «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; 
     } 
    } 

Właśnie umieściłem etykietę nad grupąBox i dodałem tę funkcję do zdarzenia "onClick" na etykiecie. Aby zwiększyć czytelność dla użytkowników, dodałem na początku tekstu znak .