Non esiste una cosa come impossibile nello sviluppo del software. Impossibile, richiede più tempo.
Ho studiato il problema. Se c'è davvero bisogno di Flow Layout, può essere fatto con un po 'di lavoro. Poiché FlowLayoutPanel espone i controlli senza pensare in modo particolare al numero di righe/colonne, ma piuttosto alla larghezza/altezza cumulativa, potrebbe essere necessario tenere traccia del numero di controlli che hai già aggiunto. Prima di tutto, imposta l'autosize su false, quindi aggancia la tua logica di gestione delle dimensioni agli eventi ControlAdded/ControlRemoved. L'idea è quella di impostare la larghezza e l'altezza del pannello in modo tale, che otterrete il vostro numero desiderato di 'colonne' là
proof of concept sporco:
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;
}
}
se il pannello ha inizialmente larghezza per 4 controlli, genererà una riga per quelli nuovi. ControlRemoved handler dovrebbe controllare lo stesso e diminuire l'altezza del pannello, oppure ottenere tutti i controlli contenuti e posizionarli nuovamente. Dovresti pensarci, potrebbe non essere il tipo di cosa che vuoi. Dipende dagli scenari di utilizzo. Tutti i controlli saranno della stessa dimensione? Altrimenti, avresti bisogno di una logica più complicata.
Ma in realtà, pensa al layout della tabella: puoi avvolgerlo in una classe helper o ricavarne un nuovo controllo, in cui dovrai risolvere tutta la logica di posizionamento del controllo. FlowLayout semplifica l'aggiunta e la rimozione dei controlli, ma poi inserisce il codice di gestione delle dimensioni. TableLayout offre un buon meccanismo per righe e colonne, la gestione di larghezza e altezza è più semplice, ma è necessario più codice per modificare la posizione di tutti controlla se vuoi rimuoverne uno dal modulo in modo dinamico.
fonte
2010-02-17 23:27:56
Sono sorpreso che nessuno abbia risposto a questo, sto avendo lo stesso problema. Bump? – echo
TableLayoutPanel potrebbe essere una soluzione migliore per te: ha incorporato il supporto per il ridimensionamento automatico di colonne e righe, nonché la dimensione automatica per l'intero pannello. – Bevan