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;
}
}
}
4 réponses
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.
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
}
}
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;
}
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.
De nouvelles questions
c#
C # (prononcé "see sharp") est un langage de programmation multi-paradigme de haut niveau, typé statiquement développé par Microsoft. Le code C # cible généralement la famille d'outils et d'exécutions Microsoft .NET, notamment le .NET Framework, .NET Core et Xamarin. Utilisez cette balise pour les questions sur le code écrit en C # ou en spécification formelle de C #.