2009-08-31 12 views
20

mam UserControl który składa się z Label (TOP), A FlowLayoutPanel (Fill, przepływ TopDown i bez zawijania) i Panel (na dole). Kontrola użytkownika tworzy wiele formantów, w oparciu o listę rzeczy, które dostaje, i dodaje je do FlowLayoutPanel.C#: Jak uzyskać kontrolę użytkownika, aby właściwie sama wielkość auto

Jak mogę zmienić tę wartość, aby UserControl poprawnie zmienić rozmiar, aby FlowLayoutPanel nie zawierał żadnych pasków przewijania? Próbowałem użyć różnych kombinacji AutoSize i AutoSizeMode sam w sobie, ale nie wydaje mi się, aby działało. Albo kończę z czymś, co w ogóle się nie zmienia, albo nie staje się wystarczająco duże, albo jest spłaszczone prawie do zera.

Odpowiedz

11

Dzięki za wszystkie sugestie. Rozwiązanie tym razem zdawało się ustawiać AutoSize na true zarówno dla samego siebie, jak i dla samego siebie.

Teraz, jak się formularz, który będzie zawierał tę UserControl a także kilka innych elementów sterujących, że nie mogę całkiem zorientować się w tej chwili, ale myślę, że powinno być oddzielnym pytanie ...

+0

Czy udało ci się rozwiązać ostatnią część? – Macke

+0

@Macke To było jak 6 lat temu, więc nie mam pojęcia, hehe. Może poszukiwanie pytań zadawanych przeze mnie w czasie, kiedy o to pytałem: P – Svish

5

Możesz użyć właściwości Anchor- i Dock UserControl, aby ustawić opcje tak, aby krawędzie kontrolne zostały "sklejone" z innymi częściami twojego interfejsu użytkownika. Gdy rozmiar interfejsu użytkownika zostanie zmieniony, twoja kontrola będzie podążać wzdłuż!

Jeśli użyjesz kotwic i zadokujesz na wszystkich kontrolkach w sterowaniu użytkownika i ustawisz je do zadokowania krawędzi kontrolki, elementy sterujące zmienią rozmiar za pomocą Kontroli użytkownika, a teraz możesz także ustawić kotwice/zadokowanie także w sterowniku UserControl.

+3

Wiem, ale nie chcę, aby kontrola zmieniała rozmiar w zależności od rodzica. Chcę, aby rosło lub zmniejszało się tak, aby było wystarczająco duże, aby zakryć zawartość 'FlowLayoutPanel' bez tego, by uzyskać paski przewijania lub obcinanie jakiejkolwiek zawartości. – Svish

0

stwierdziliśmy, że najlepszym sposobem rozwiązania tego problemu było użycie kodu w przypadku ControlAdded na FlowLayoutPanel aby dostosować wysokość panelu (wysokość bo uzywasz przepływ TopDown) być:

e.Control.Location.Y + e.Control.Height + some margin 

i ustawić właściwość AutoSize na samej sterowaniu użytkownika na wartość True.

Należy również wykonać niektóre z dokowania i zakotwiczenia, zgodnie z odpowiedzią Mickela.

Ta funkcja może być enkapsulowana do formantów dziedziczonych z FlowLayoutPanel i przesłaniających metodę ControlAdded.

2

Owijanie FlowLayoutPanel w TableLayoutPanel pozwoli na prawidłowe zachowanie autosize.

Twój UserControl powinna wyglądać następująco:

UserControl 
    TableLayoutPanel (Dock-Fill) 
     Row1 : Label 
     Row2 : FlowLayoutPanel (Panel:Dock-Fill AND AutoSize, Row:AutoSize) 
     Row3 : Panel 

Ponownie, przy użyciu tego UserControl możliwe jest, trzeba zawinąć go w TableLayoutPanel stosując AutoSize wiersza lub kolumny.

Należy uważać na SplitContainers, ponieważ często wytrącają one z autosize zachowania.

0

Po dodaniu formantu do FlowLayout można zmienić rozmiar już dodane formanty do wymaganej wielkości bez uzyskiwania pasków przewijania dla przepływu układu panel.l

Powiązane problemy