Utilisation de WinForms; Existe-t-il un meilleur moyen de trouver le RadioButton vérifié pour un groupe? Il me semble que le code ci-dessous ne devrait pas être nécessaire. Lorsque vous cochez un autre RadioButton, il sait lequel décocher… il doit donc savoir lequel est coché. Comment puis-je extraire ces informations sans faire beaucoup d'instructions if (ou un commutateur).
RadioButton rb = null;
if (m_RadioButton1.Checked == true)
{
rb = m_RadioButton1;
}
else if (m_RadioButton2.Checked == true)
{
rb = m_RadioButton2;
}
else if (m_RadioButton3.Checked == true)
{
rb = m_RadioButton3;
}
c#
.net
winforms
radio-button
Gamelle
la source
la source
Réponses:
Vous pouvez utiliser LINQ:
Notez que cela nécessite que tous les boutons radio soient directement dans le même conteneur (par exemple, Panel ou Form) et qu'il n'y ait qu'un seul groupe dans le conteneur. Si ce n'est pas le cas, vous pouvez créer
List<RadioButton>
s dans votre constructeur pour chaque groupe, puis écrirelist.FirstOrDefault(r => r.Checked)
.la source
s.FirstOrDefault
plutôt quelist.FirstOrDefault
dans le deuxième paragraphe de votre réponse?s
est une pluralisation, pas un nom de variable.Vous pouvez câbler les CheckedEvents de tous les boutons à un seul gestionnaire. Là, vous pouvez facilement obtenir la case à cocher correcte.
la source
Pour ceux qui n'ont pas LINQ:
la source
L'OP voulait obtenir le RadioButton BY GROUP vérifié. Bien que la réponse de @SLaks soit excellente, elle ne répond pas vraiment à la question principale du PO. Pour améliorer la réponse de @SLaks, prenez simplement le LINQ un peu plus loin.
Voici un exemple de mon propre code de travail. Par WPF normal, mes RadioButtons sont contenus dans un
Grid
(nommé "myGrid") avec un tas d'autres types de contrôles. J'ai deux groupes RadioButton différents dans la grille.Pour obtenir le RadioButton vérifié d'un groupe particulier:
Si votre code a la possibilité qu'aucun RadioButtons ne soit vérifié, utilisez
SingleOrDefault()
(Si je n'utilise pas de boutons à trois états, je définis toujours un bouton "IsChecked" comme sélection par défaut.)la source
.Where(r => r.GroupName == "GroupName" && r.IsChecked == true)
carr.IsChecked
est une propriété booléenne Nullable.Vous pouvez utiliser l' événement CheckedChanged pour tous vos RadioButtons.
Sender
seront les RadioButtons non cochés et cochés.la source
Vous pouvez utiliser une méthode Extension pour itérer la collection Parent.Controls de RadioButton. Cela vous permet d'interroger d'autres RadioButtons dans la même portée. En utilisant deux méthodes d'extension, vous pouvez utiliser la première pour déterminer si des boutons radio du groupe sont sélectionnés, puis utiliser la seconde pour obtenir la sélection. Le champ RadioButton Tag peut être utilisé pour contenir un Enum pour identifier chaque RadioButton du groupe:
Voici un modèle d'utilisation typique:
la source
En plus du câblage CheckedChangedEvent, on pourrait utiliser la propriété Controls "Tag" pour distinguer les boutons radio ... une alternative (spaghetti code) serait la propriété "TabIndex"; P
la source
Parfois, dans des situations comme celle-ci, ma jeunesse me manque, quand Access était mon poison de choix, et je pouvais donner à chaque bouton radio d'un groupe sa propre valeur.
Mon hack en C # consiste à utiliser la balise pour définir la valeur, et lorsque je fais une sélection dans le groupe, je lis la valeur de la balise du radiobutton sélectionné. Dans cet exemple, directionGroup est le groupe dans lequel j'ai quatre cinq boutons radio avec "Aucun" et "NE", "SE", "NW" et "SW" comme balises sur les quatre autres boutons radio.
J'ai utilisé de manière proactive un bouton pour capturer la valeur du bouton coché, car l'attribution d'un gestionnaire d'événements à tous les événements CHeckCHanged des boutons provoque le déclenchement de CHAQUE bouton, car en changer un les change tous. Ainsi, la valeur de sender est toujours le premier RadioButton du groupe. Au lieu de cela, j'utilise cette méthode lorsque j'ai besoin de savoir laquelle est sélectionnée, avec les valeurs que je veux récupérer dans la propriété Tag de chaque RadioButton.
Pour info, j'ai testé et utilisé cela dans mon travail.
Joey
la source
si vous souhaitez enregistrer la sélection dans un fichier ou autre et l'appeler plus tard, voici ce que je fais
alors appelle-le avec
la source
Si vous souhaitez obtenir l'index du bouton radio sélectionné dans un contrôle, vous pouvez utiliser cette méthode:
Exemple d'utilisation:
Le code n'est pas si bien testé, mais il semble que l'ordre d'index soit de gauche à droite et de haut en bas, comme lors de la lecture d'un texte. Si aucun bouton radio n'est trouvé, la méthode renvoie -1.
Mise à jour: il s'est avéré que ma première tentative n'a pas fonctionné s'il n'y a pas de bouton radio à l'intérieur du contrôle. J'ai ajouté un bloc try and catch pour résoudre ce problème, et la méthode semble maintenant fonctionner.
la source
Le GroupBox a un événement Validated à cet effet, si vous utilisez WinForms.
la source
Pour les développeurs utilisant VB.NET
la source