Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

RADIOBUTTON EN .NET SUR PLUSIEURS CONTENEURS DIFFÉRENTS


Information sur la source

Catégorie :Control Source .NET ( DotNet ) Classé sous : radiobutton, panel, différent, net, panneau Niveau : Débutant Date de création : 19/01/2006 Date de mise à jour : 19/01/2006 17:27:35 Vu / téléchargé: 8 458 / 376

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
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

  • '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
'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
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

19 janvier 2006 17:27:36 :
petite correction dans les termes, j'avais écris radion au lieu de radio.

Commentaires et avis

signaler à un administrateur
Commentaire de sebmafate le 19/01/2006 16:56:18 administrateur CS

    '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

non ce n'est pas un bug de .net... on ne garde pas un évènement d'un objet détruit !
c'est comme si tu gardais une assurance pour une voiture que tu n'as plus.

signaler à un administrateur
Commentaire de dragon le 19/01/2006 17:25:58

enlève le removeEvent et tu vas voir que les évênements sont gardé et pourtant, il est plus dans la collections, mais l'objet garde une référence d'un event dans cette class

le bug viens soit du remove, soit du clear, mais les 2 ne fond pas la même chose avec le event

signaler à un administrateur
Commentaire de FraGag le 19/01/2006 23:55:35

Dans la procédure modification(), pourquoi utiliser l'itérateur au lieu de For Each ... Next ? Y a-t-il une raison qui empêche son utilisation ? À ce que je sache, For Each ... Next fait exactement la même chose. On aurait donc :

Private Sub modification(...)
    For Each CheckBox As CheckBox In Collection
        CheckBox.Checked = False
    Next
    sender.Checked = True
End Sub

signaler à un administrateur
Commentaire de dragon le 20/01/2006 02:51:57

sauf que l'itérateur est considéré comme une meilleur programmation qu'un "for each"
en plus, ma class pourrait t'être adapter pour n'importe quel language et pas le "for each" qui est spécifique à VB.

je préfère toujours utiliser certain standart qu'utiliser des fonction spécifique et non transportable.

c'est come pourquoi mettre: add, remove et removeAll au lieu du français. C'est tout simplement pour garder les standarts appliqué à la programmation. C'est comme "get" et "set"

signaler à un administrateur
Commentaire de Kelpan le 23/01/2006 21:28:47

Le For Each permet de caster directement l'objet RadioButton et permet de detecter plus facilement des bugs non voulu

Dans le cas de l'iterateur, current renvoi un object et la propriété Checked n'est pas une propriété de la classe object.

Fais la comparaison entre ces 2 cas

Cas 1 :
Dim CtlRadio As RadioButton

For each CtlRadio in Collection
    ctlRadio.Cheked = False ' Le c de Checked a été volontairement oublié
Next

Cas 2 :

Dim iterator As System.Collections.IEnumerator = Collection.GetEnumerator

While iterator.MoveNext
    iterator.Current.cheked = False ' Le c de Checked a été volontairement oublié
End While

Dans le cas 1, l'erreur est detecté à la compilation, mais pas dans le cas 2.

Pour résoudre le problème dans le cas 2, il faudrait caster iterator.Current en RadioButton pour que ce soit plus propre.

Il en va de même pour l'objet "sender"...

Conclusion :

Le cas 1 demande moins de code que le cas 2 pour être plus propre.

signaler à un administrateur
Commentaire de dragon le 24/01/2006 00:37:00

sauf dans ma class, c'est totallament impossible que ça soit pas un checkbox. à la limite, il faudrait ajouter un ctype(iterator.Current,RadioButton).

mais bon
moins de code, veut pas dire plus propre.

mais là, c'est vraiment une question de goût. Moi je préfère suivre les patrons GoF qui a été défini par W3C que les normes définis par Microsoft

signaler à un administrateur
Commentaire de Kelpan le 24/01/2006 20:12:48

Le fait que cela soit impossible que cela ne soit pas un CheckBox (Ou RadioButton) ne veut pas dire que tu ne peux pas te tromper sur la synthaxe du mot Checked (Ce que je te montre dans mon exemple). En cas d'erreur le compilateur ne voit rien.
Comme tu le dis (moi aussi dans mon post) à la limite, il faudrais caster en RadioButton.

Quand tu dis "moins de code, ne veut pas dire plus propre.", je suis entièrement d'accord, mais si tu as la possibilité de faire quelque chose de propre avec moins de ligne, je ne vois que des avantages...

Patrons GoF definis par WC3 !!?? Tu peux m'éclairer ? Je ne connais pas.

Pour info :
Le "For Each" n'est pas spécifique qu'à VB
Par exemple, on le retrouve aussi sous Java :
for(<Objet récupérant l'occurance suivante de la collection> : <Collection d'objets>){
   instruction(s)
}


signaler à un administrateur
Commentaire de dragon le 24/01/2006 23:57:27

Les patron de GoF ou de Grasp sont des patron haut niveau qui ont été inventer pour résoudre des problème défini dans n'importe quel language

j,ai fait 5 tutoriaux sur les premier patron. Puisque j'avais pas de réaction,sauf sur le singleton j'ai arrêté

P.S.: J'.ai été vite, mais ma source utilise une collection et toi un tableau. Une collection est de type object, donc même avec ton for each, tu vas avoir un type object et non radiobutton

signaler à un administrateur
Commentaire de sebmafate le 25/01/2006 06:20:40 administrateur CS

je ne vois pas ce que vient faire le W3C dans l'histoire... mais bref.
L'instruction For Each permet de parcourir une collection d'objets (en fait tout ce qui est itérable). On retrouve aujourd'hui dans la plupart des langages (objet ou non) : vb6, vb.net, C#, java, php, javascript, python... je ne vois donc pas l'intérêt de la contourner... à la rigueur l'utilisation du For..Next est justifié pour des raisons de performances.

signaler à un administrateur
Commentaire de dragon le 25/01/2006 07:38:13

un for eatch est un iterateur déguisé premièrement
ça parcour une collection, mais ça défini pas les termes, sauf si la collection est défini, comme en java 1.5, ou que c'est un tableau défini.

Les collections sont beaucoup plus rapide qu'un tableau. Si on compare le for eatch et un itérateur en vitesse, le résultat est totallement identique.

Pour W3C, renseigne toi un peu. Les premier à avoir défini des patrons ont été les GoF. ensuite c,est devenu populaire. Mais maintenant, c'est W3C qui est rendu a faire la gestion et la validation des nouveaux patrons ... ou IBM, c'est pas clair rendu là. (http://www.google.ca/search?hl=fr&q=site%3Ahttp%3A%2F%2Fwww.w3.org+pattern&meta=)

Et arrêter donc avec ça, ça a aucun rapport avec la source. Le but de la source est l'utilisation des radiobutton sur plusieurs panel, pas de rester accrocher sur une partie qui va absolument rien changer au final. là vous faite juste mèler les débutants.

Cette source, je l'ai classé débutant, puisqu'il y a rien de compliquer dessus, sauf là, un débutant qui va se mettre à lire les commentaires, va rien comprendre et va abandonner la source. Si j'avais mis la source intermédiare, je comprendrais qu'il faudrais se poser ce genre de question, mais pas débutante. ce n'est pas un algo de trie, encription, compression où tout doit-être parfait et le moindre petit gain est appréciable.

Ça fini par devenir fatigant de voir du monde poster ce genre de commentaires sur une source qui parle pas dutout de ça. Faudrait pas que j'aille commencer chaque ligne de code de chacun de vos programme, vous aussi vous finiriez par trouver ça lassant à la fin. sur mes 4 dernières sources, il y en a 3 que j'ai pas arrêter de recevoir ce genre de commentaire, à cause d'un programmeur qui a pas la même philosophie qu'un autre programmeur.

si ça continu, je vais garder pour moi mes code source et je vais arrêter d'aider le monde

signaler à un administrateur
Commentaire de FraGag le 25/01/2006 07:57:57

Moi non plus, j'aime pas ces discussions qui dérapent... et quand c'est moi qui les commence... :(

Bon, j'avais rien dit sur la source, mais c'est très bien. Tiens, un petit 10/10 ;) !

Désolé pour le dérangement...

signaler à un administrateur
Commentaire de sebmafate le 25/01/2006 09:48:12 administrateur CS

faut pas prendre la mouche comme cela... mes remarques ne se veulent pas désobligeantes.
Il est intéressant de pouvoir comparer les différentes façons de travailler.

continue à poster des choses intéressantes...

signaler à un administrateur
Commentaire de dragon le 25/01/2006 13:29:17

c'est juste que c'est hors sujet.
j'ai fait une siource, juste sur l'itérateur, la conversation devrait plutot être là et non ici.

j'ai rien contre les commentaires, sauf quand c'est hors sujet et quand le niveau des commentaire est de loin le niveau de la source. ça fait fuir les débutant ce genre de commentaire

signaler à un administrateur
Commentaire de lucgod1 le 17/10/2006 14:02:17

Bravo DRAGON pour cette source bien utile ET qui fonctionne parfaitement.
BYE.

signaler à un administrateur
Commentaire de dragon le 17/10/2006 23:44:33

merci, ça fait plaisir d'aider

signaler à un administrateur
Commentaire de nazavb le 22/01/2008 14:28:24

ok

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

creer panel dynamiquement VB.NET !!!!!!!!! [ par whiskygt ] salutJe me prend la tete depuis deux heures à tester tout les codes present sur le site pour creer un objet dynamiquement mais aucun ne fonctionne sou [VB.NET]Peut-on éviter le clignotement et leralentissement lors d'un resize d'un Panel [ par claudetom ] Bonjour,vb.netJe resize via un timer (pour un effet ascenseur) un panel qui contient untabcontrol qui lui contient dans ces différents onglets (listvi [.Net] Panel et point et couleur et glace à l'eau ! [ par cbu ] Bonjour,je dessine des rond des cercles des lignes sur un panel en VB.Netj'aimerais savoir comment récupérer la courleur d'un point précis de coordonn [VB.Net] Insertion UserControl dans Panel [ par GaD60 ] Bonjour à tous,Je me suis mis au vb depuis peu (avec VB.Net), j'ai déjà réussi à faire une fenetre avec un menu et des boites de dialogue dont le résu coordonnées clic sur image .NET [ par beetsy ] salut a tousje voudrais obtenir les coordonées X et Y de l'ENDROIT DE L'IMAGE lorsque je clic dessusEn fait j'ai un form de 500x500 avec un panel de 4 Impression avec VB.NET [ par ava0275 ] Bonjour ,Voici le topo ce que je veux faire:je fais une appli dans laquelle&nbsp;l utilisateur place des textbox dans un panel pendant l execution.Je RadioButton [ par cerbain1 ] Je suis debutant en vb.net, j'ai 3 GroupBox chacune avec plusieurs radioButton, ce qui permet de faire une selection de different produits(un par Grou VB.NET - Déplacement de plusieurs PictureBox d'un panel [ par morickno ] je d&#233;place une pictureBox pr&#233;sente sur un panel en cliquant dessus puis avec&nbsp;le d&#233;placement de la souris, le mouseMove(comme du dr VB.NET [ par mayouma ] Bonjour;Je suis entrain de faire une application en VB.Net. j'ai cr&#233;er une form qui contient un menu et dans laquelle il y a un panel pour pouvoi RadionButton en .net [ par dragon ] Salut,j'ai une petite question pour les pro de .netj'ai mis des radio button sur une form qui contient des panels (ici c'est encore d&#233;butant, &#2


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,640 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.