2009-08-03 4 views
15

Zajmuję się tworzeniem aplikacji Windows Forms (.NET 2.0, VS 2005). Mam postać, która zasadniczo zawiera panel, który jest dynamicznie zmienionym rozmiarze z postaci:Jak ustawić paski przewijania w panelu z możliwością zmiany rozmiaru, gdy zawarta w nim kontrola jest za duża?

this.panel1.Dock=DockStyle.Fill; 

Panel ten jest po prostu używany jako pojemnik. W czasie wykonywania, kontrola zwyczaj zostanie dodana:

UserControl uc=new UserControl(); 
panel1.Controls.Add(uc); 
uc.Dock=DockStyle.Fill; 

Jak to zwyczaj kontrola ma minimalne zapotrzebowanie na wielkość, chcę paski przewijania pojawiają się na panelu zawierającego jeśli robi się zbyt mały, aby pokazać całą kontrolę:

this.panel1.AutoScroll=true; 

To nie działa. Próbowałem zmienić rozmiar panelu za pomocą właściwości Anchor zamiast właściwości Dock, bezskutecznie.

Odpowiedz

24

Nie dopełniaj kontroli użytkownika. Zamiast tego użyj właściwości Anchor. (Zakotwicz na wszystkich czterech stronach). ustawić cię kontrolowania ustawień nieruchomość MinimumSize ustawić panelu rekreacyjnego AutoScrollMinSize

przewijania panelu nie pojawi się, jeśli nie ustawić jego właściwość AutoScrollMinSize. Ustawienie Docka kontrolki użytkownika do wypełnienia wydaje się ukrywać paski przewijania panelu.

+10

Właściwość Dock jest dobra zarówno dla panelu, jak i dla użytkownika, o ile ustawiono AutoScrollMinSize (http://social.msdn.microsoft.com/Forums/ en-US/winforms/thread/56267eb1-25af-4df2-82a3-0498563c7eef). – Mac

+0

Zakotwiczenie nie jest tym samym, co Dokowanie. Na przykład, jeśli zrobię niewidoczną kontrolkę zadokowaną, automatycznie zmieni ona kolejną kontrolę. Zakotwiczenie nie daje tej umiejętności. Dokowanie jest bardzo użyteczne, ale jak mówi OP, nie zawsze działa tak, jakbyś miał nadzieję z nadrzędną kontrolą Autoscroll - nawet przy ustawianiu minimalnego rozmiaru zadokowanego sterowania – Gwynge

2

Po InitializeComponent w postaci dialogowym, zrobiłem to i wydawało się działać:

tableLayoutPanel1.AutoScrollMinSize = tableLayoutPanel1.GetPreferredSize(new Size(1, 1)); 

Mam kilka subpanels w tabeli. Wszystkie wiersze i kolumny są ustawione na AutoSize. Z jakiegoś powodu sterowanie nie jest wystarczająco inteligentne, aby sterować przewijaniem jego preferowanym rozmiarem.

1

Panel.AutoScroll = * True działa - TERAZ! Grałem i bawiłem się powyższymi pomysłami, zarówno dla panelu, jak i dla kontroli użytkownika, i ostatecznie zresetowałem wszystko z powrotem do domyślnego, ustaw Autoscroll na panelu i ... voila! jakoś to działa ponownie ... idź rysunek ...

Powiązane problemy