Nie ma czegoś takiego jak niemożliwe w rozwoju oprogramowania. Niemożliwe zajmuje więcej czasu.
Zbadałem problem. Jeśli naprawdę istnieje potrzeba Flow Layout, można to zrobić przy odrobinie pracy. Ponieważ FlowLayoutPanel określa elementy sterujące bez szczególnego myślenia o liczbie wierszy/kolumn, ale raczej o łącznej szerokości/wysokości, może być konieczne śledzenie liczby dodanych kontrolek. Przede wszystkim ustaw autosize na wartość false, a następnie prześlij swoją własną logikę zarządzania rozmiarami do zdarzeń ControlAdded/ControlRemoved. Chodzi o to, aby ustawić szerokość i wysokość panelu w taki sposób, że dostaniesz żądaną liczbę „kolumn” nie
Brudny proof of concept:
private void flowLayoutPanel1_ControlAdded(object sender, ControlEventArgs e)
{
int count = this.flowLayoutPanel1.Controls.Count;
if (count % 4 == 0)
{
this.flowLayoutPanel1.Height = this.flowLayoutPanel1.Height + 70;
}
}
jeśli panel ma początkowo szerokość dla 4 kontrolek, wygeneruje wiersz dla nowych. ControlRemoved handler powinien sprawdzić to samo i zmniejszyć wysokość panelu, lub uzyskać wszystkie zawarte kontrolki i umieścić je ponownie. Powinieneś o tym pomyśleć, może to nie jest to, czego chcesz. To zależy od scenariuszy użycia. Czy wszystkie kontrolki będą tego samego rozmiaru? Jeśli nie, potrzebujesz bardziej skomplikowanej logiki.
Ale tak naprawdę, pomyśl o układzie tabeli - możesz zawinąć go w klasę pomocnika lub wyprowadzić z niego nową kontrolę, w której rozwiążesz całą logikę rozmieszczania kontrolek. FlowLayout ułatwia dodawanie i usuwanie kontrolek, ale potem kod zarządzania wielkością idzie. TableLayout daje dobry mechanizm dla wierszy i kolumn, zarządzanie szerokością i wysokością jest łatwiejsze, ale potrzebujesz więcej kodu, aby zmienić rozmieszczenie wszystkich formanty, jeśli chcesz usunąć jeden z formularza dynamicznie.
Jestem zaskoczony, nikt nie odpowiedział na ten, mam ten sam problem. Guz? – echo
TableLayoutPanel może być lepszym rozwiązaniem dla Ciebie - ma wbudowaną obsługę automatycznych rozmiarów kolumn i wierszy, a także automatyczny rozmiar dla całego panelu. – Bevan