J'ai un formulaire sur lequel j'ai placé 2 boutons radio. Mon problème est que j'en ai besoin pour fonctionner de manière à ce que si l'on clique sur l'un, l'autre le soit. J'ai le code suivant mais il reste coincé dans une boucle infinie une fois que vous avez fait le premier clic et je comprends pourquoi. Vous voulez voir si l'un d'entre vous sait comment faire cela en c #? Je suis assez nouveau en c #

public partial class Form1 : Form
{
    public Form1()
    {
        radAllCols.CheckedChanged += new EventHandler(this.radAllCols_Checked);
        radSelCols.CheckedChanged += new EventHandler(this.radSelCols_Checked);
    }

    private void radAllCols_Checked(object sender, EventArgs e)
    {
        if (radAllCols.Checked == true)
        {
            radAllCols.Checked = false;
            radSelCols.Checked = true;
        }
    }

    private void radSelCols_Checked(object sender, EventArgs e)
    {
        if (radSelCols.Checked == true)
        {
            radSelCols.Checked = false;
            radAllCols.Checked = true;
        }
    }
}
0
SBozhko 18 juil. 2017 à 10:21

4 réponses

Meilleure réponse

Si les boutons radio ont des valeurs RadioGroup différentes, vous devez d'abord désinscrire l'événement Checked, modifier la valeur de la propriété Checked et réenregistrer l'événement Checked.

private void radAllCols_Checked(object sender, EventArgs e)
{
    if (radAllCols.Checked == true)
    {
        radAllCols.CheckedChanged -= new 
                 EventHandler(this.radAllCols_Checked);
         radSelCols.CheckedChanged -= new 
                 EventHandler(this.radSelCols_Checked);
        radAllCols.Checked = false;
        radSelCols.Checked = true;
        radAllCols.CheckedChanged += new 
                 EventHandler(this.radAllCols_Checked);
         radSelCols.CheckedChanged += new 
                 EventHandler(this.radSelCols_Checked);
    }
}

private void radSelCols_Checked(object sender, EventArgs e)
{
    if (radSelCols.Checked == true)
    {
        radAllCols.CheckedChanged -= new 
                 EventHandler(this.radAllCols_Checked);
         radSelCols.CheckedChanged -= new 
                 EventHandler(this.radSelCols_Checked);
        radSelCols.Checked = false;
        radAllCols.Checked = true;
        radAllCols.CheckedChanged += new 
                 EventHandler(this.radAllCols_Checked);
         radSelCols.CheckedChanged += new 
                 EventHandler(this.radSelCols_Checked);
    }
}

Le code ci-dessus est destiné à des scénarios très personnalisés et doit être évité autant que possible. Les boîtes radio doivent se comporter automatiquement comme vous le souhaitez. Assurez-vous que vous avez la même valeur de propriété RadioGroup sur les deux.

2
Mihail Stancescu 18 juil. 2017 à 07:35

Les RadioButtons placés dans le même contrôle parent (comme un panneau) se comportent de cette façon par défaut.

Il n'est pas nécessaire d'utiliser un événement coché pour cela.

La définition des valeurs de la propriété radAllCols.Checked = true déclenche l'événement radAllCols_Checked ce qui provoque votre "boucle" infinie

Puisque vous essayez de décocher le même bouton radio à cocher

private void radSelCols_Checked(object sender, EventArgs e)
{
    if (radSelCols.Checked == true)
    {
        radSelCols.Checked = false; // reversed
        radAllCols.Checked = true; // reversed
     }
}
0
user6144226 18 juil. 2017 à 07:32

Votre reste du code est correct, mais vous devez changer votre code dans les méthodes vérifiées () comme mentionné ci-dessous pour éviter une boucle infinie, puis cela fonctionnera correctement:

private void radAllCols_Checked(object sender, EventArgs e)
 {
   radAllCols.Checked = !radSelCols.Checked;
 }

private void radSelCols_Checked(object sender, EventArgs e)
 {
   radSelCols.Checked = !radAllCols.Checked;
 }
0
Aman Sahni 18 juil. 2017 à 07:42

Si vous utilisez GroupBox Container Element pour les mêmes boutons radio que vous souhaitez sélectionner l'un d'eux, vous n'avez pas besoin de gérer manuellement l'état de vérification des boutons radio, lorsque vous sélectionnez une radio Bouton tous les autres boutons radio dans le même groupe seront décochés.

1
Parsa Karami 18 juil. 2017 à 07:36