Moi, j'étais partie sur l'idée d'un seul FlowLayoutPanel. Mais de ce que je comprend, tu souhaite avoir systématiquement 3 contrôles en largeur et pas plus quelque soit la largeur de ton groupbox.
Dans ce cas, il serait plus approprier d'utiliser un TableLayoutPanel.
A noter que l'utilisation d'un TableLayoutPanel n'est valable que dans le cas ou le Groupbox peut se retrouver être redimensionné. Si celui-ci n'est jamais redimensionné et que sa taille est connue dès le départ, il est aussi simple de positionner manuellement les contrôles sur le groupbox
Exemple :
Tu pose un TableLayoutPanel dans ton GroupBox, tu lui met sa propriété Dock à Fill, sa propriété ColumnCount à 3, sa propriété RowCount à 3 ou plus suivant le nombre de ligne que tu veux.
Si tu veux répartir équitablement les colonnes dans le groupbox, tu ouvre la propriété Columns du tablelayoutpanel, et tu vérifie que chaque colonne est positionner sur Pourcentage
Ensuite dans le code, tu rajoute chaque contrôle à la collection Controls du TableLayoutPanel en précisant la colonne et la ligne de destination.
Pour un calcul automatique, la colonne sera déterminée par le reste de la division par 3 (modulo) du n° du contrôle et la ligne par la division entière par 3 du n° du contrôle, avec ce n° commençant à 0.
Ce qui pourrait donner ce code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| private void Form1_Load(object sender, EventArgs e)
{
int i = 1;
foreach (string pays in tab_pays)
{
RadioButton rdb = new RadioButton();
rdb.Name = "rdb_" + pays + "_" + i;
rdb.Text = pays;
rdb.TabIndex = 60;
tableLayoutPanel1.Controls.Add(rdb,(i-1) % 3, (i-1)/3 );
i++;
} |
Partager