IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

GroupBox et disposition des RadioButton


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Points : 11
    Points
    11
    Par défaut GroupBox et disposition des RadioButton
    Bonjour, à tous j'ai un petit problème avec un combobox dans lequel je voudrai
    ajouter des radiobutton et avoir une mise en place comme ceci.

    Pour se faire j'ai une liste de pays

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string[] tab_pays = {"France", "Maroc", "Algérie", "USA", "Angleterre", "Argentine", "Japon", "Suisse"};
    et je mets dans l'évenement on load de mon form

    //grb_pays = mon group box

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
            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.Location = new Point(1, i * 30);
                    rdb.TabIndex = 60;
                    //rdb.Location.X =leftpoint;
                    //rdb.Location.Y =rightpoint;
                    //rdb.CheckedChanged += new EventHandler(rdb);
                    //MessageBox.Show(pays);
                    grb_pays.Controls.Add(rdb);
                    i++;
                }
            }
    Par contre ce qui s'affiche chez moi c'est la liste des pays les un en dessous de autres, or je voudrai par exemple


    1. que le group box s'auto dimensionne
    2. que les radiobutton sorganisent en fonction de la la largeur du groupbox.

    Exemple j'ai 9 pays, j'aurais trois colonne de trois.

    Mais comment faire des colonnes dans un groupbox.

    Merci à tous

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    C'est toi qui positionne volontairement des contrôles en une seule colonne en donnant toujours la valeur 1 à la coordonnée X du contrôle dans cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     rdb.Location = new Point(1, i * 30);
    Soit tu joue sur cette coordonnée X et la coordonnée Y qui va avec pour positionner précisément ton contrôle ou tu veux, soit tu utilise l'un des deux container tableau qui existe (à mettre à l'intérieur du groupbox avec le mode Dock à Fill):

    - FlowLayoutPanel : Il te réorganisera automatiquement les contrôles en 1,2,3,... colonnes suivant la largeur des contrôles et du groupbox

    - TableLayoutPanel : Là tu fixe le nombre de ligne et de colonnes et tu positionne un contrôle dans chaque cellule. La largeur des contrôles et leur espacement seront automatiquement adaptés en fonction de la largeur du tableau
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par sevyc64 Voir le message
    C'est toi qui positionne volontairement des contrôles en une seule colonne en donnant toujours la valeur 1 à la coordonnée X du contrôle dans cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     rdb.Location = new Point(1, i * 30);
    Soit tu joue sur cette coordonnée X et la coordonnée Y qui va avec pour positionner précisément ton contrôle ou tu veux, soit tu utilise l'un des deux container tableau qui existe (à mettre à l'intérieur du groupbox avec le mode Dock à Fill):

    - FlowLayoutPanel : Il te réorganisera automatiquement les contrôles en 1,2,3,... colonnes suivant la largeur des contrôles et du groupbox

    - TableLayoutPanel : Là tu fixe le nombre de ligne et de colonnes et tu positionne un contrôle dans chaque cellule. La largeur des contrôles et leur espacement seront automatiquement adaptés en fonction de la largeur du tableau
    Ok, merci je voudrai bien utiliser le container FlowLayoutPanel,

    j'en ai ajouté trois à mon groupbox et dock set à fill.

    Maintenant comment est-ce que je fais pour lui dire qu'il n'aura que trois objet
    à l'intérieur de chacun et comment est ce que je peux boucler sur les trois FlowLayoutPanel pour récupérer celui qui est checked?

    Merci

  4. #4
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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++;
                }
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par sevyc64 Voir le message
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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++;
                }
    Hello, je n'avais pas de suite compris mais j'ai bien suivi tes conseil,

    j'ai crée le tablelayout1 avec trois colonne et 4 ligne, les 3 par ligne c pas

    obligatoire, c'était juste un exmple.

    et enfin inséré mes données et ça marche nickel



    Voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                foreach (string pays in tab_pays)
                {
                    RadioButton rdb = new RadioButton();
                    rdb.Name="rdb_"+pays+"_"+i;
                    rdb.Text=pays;
                    rdb.Location = new Point(1, i * 30);
                    rdb.TabIndex = 60;
                    //l'utilisation du tableLayoutPanle permet de 
                    //ne pas avoir avoir à gérer les abcisc et ordonné
                    tableLayoutPanel1.Controls.Add(rdb);
                    i++;
                }

    Par contre je n'ai pas compris comment tu calcule les positions des points
    (i-1) % 3, (i-1)/3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableLayoutPanel1.Controls.Add(rdb,(i-1) % 3, (i-1)/3 );

    Merci à toi.

  6. #6
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Le calcul des points, c'est dans le cas ou tu souhaite positionner ton contrôle dans une cellule bien précise.

    Tu peux effectivement t'en passer, dans ce cas, quand tu ajoute un contrôle il est positionné tout seul dans la première cellule vide.


    A retenir :
    - TableLayoutPanel : Permet de définir le nombre de colonne et de ligne à utiliser. Si ton contrôle est agrandi, les colonnes sont agrandies, mais leur nombre ne change pas

    _ FlowLayoutPanel : Permet de remplir un container en fonction de sa taille et de la taille de ses contrôles. Ici, la taille des colonnes ne change pas par contre c'est leur nombre qui va augmenter ou diminuer lorsque le container va changer de taille.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par sevyc64 Voir le message
    Le calcul des points, c'est dans le cas ou tu souhaite positionner ton contrôle dans une cellule bien précise.

    Tu peux effectivement t'en passer, dans ce cas, quand tu ajoute un contrôle il est positionné tout seul dans la première cellule vide.


    A retenir :
    - TableLayoutPanel : Permet de définir le nombre de colonne et de ligne à utiliser. Si ton contrôle est agrandi, les colonnes sont agrandies, mais leur nombre ne change pas

    _ FlowLayoutPanel : Permet de remplir un container en fonction de sa taille et de la taille de ses contrôles. Ici, la taille des colonnes ne change pas par contre c'est leur nombre qui va augmenter ou diminuer lorsque le container va changer de taille.
    Merci à toi.
    Super tes réponses.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 29/04/2011, 10h22
  2. Réponses: 7
    Dernier message: 30/05/2006, 10h55
  3. Récupérer l'état des radiobuttons
    Par nerick dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/04/2006, 14h49
  4. Réponses: 3
    Dernier message: 29/12/2005, 14h25
  5. [swing] disposition des éléments dans un GridLayout
    Par al85 dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 11/02/2005, 17h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo