Radiobutton en .net sur plusieurs conteneurs différents

Description

Les RadioButtons ont une limitation. Il est possible de les jumelés seulement à l'intérieur d'un même conteneur (form, panel, groupBox, ...).

Puisque les programmeur avancer utilise souvent beaucoup les panel pour délimiter leur composant ou en utilisant des patron de conception, je propose donc une solution, assez simple, qui permet de régler ce problème.

C'est tout simplement une class qui va géré les évênements des RadioButtons au lieu de laisser .Net les géré de façon automatique.

Le code est très puissant, malgré sa simplicité, puisqu'il permet même de géré les radioButton qui se trouve sous 2 forms différentes

Source / Exemple :


'Création Waxime

Public Class GroupRadioExtend
    'Collection qui gère les checkBox
    Private Collection As New System.Collections.ArrayList

    'Ajouter un checkBox
    Public Sub Add(ByVal nouveau As RadioButton)
        AddHandler nouveau.MouseDown, AddressOf modification 'Détecter les modifications
        Collection.Add(nouveau)
    End Sub

    'Enlever un checkBox
    'La collection gère automatiquement la suppression
    Public Sub remove(ByVal old As RadioButton)
        'Supression de l'évènement sur le bouton supprimé
        RemoveHandler old.MouseDown, AddressOf modification

        'On l'enlève de la collection
        Collection.Remove(old)
    End Sub

    'On supprime tout les radioButtons
    'Les évênements sont géré automatiquement
    'C'est en quelques sorte un bug de .net, 
    'puisque les évênements auraient du être conservé
    Public Sub removeAll()
        Collection.Clear()
    End Sub

    'Une modification a été détecté
    Private Sub modification(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        'Création d'un itérateur, voir mon tutorial sur les patrons
        Dim iterator As System.Collections.IEnumerator = Collection.GetEnumerator
        'On parcour l'itérateur et on décoche tout les RadioButtons
        While iterator.MoveNext
            iterator.Current.checked = False
        End While
        'Puis on coche le bon RadioButton
        sender.checked = True
    End Sub
End Class

Conclusion :


si vous avez des questions, n'hésité pas

chacune des couleur représente un panel, je voulais biens les définir pour bien montrer que chaque radionButton sont bel et bien sur des panneaux distincts

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.