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 !

METTRE UNE VALEUR À L'ENSEMBLE DES CONTROLES D'UN MÊME TYPE


Information sur la source

Catégorie :VB.NET Source .NET ( DotNet ) Classé sous : control, callbyname, valeur, textbox Niveau : Débutant Date de création : 12/09/2008 Date de mise à jour : 12/09/2008 17:53:49 Vu / téléchargé: 1 792 / 46

Note :
Aucune note

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

Description

Sauf erreur, il n'y a pas dans VB2008 (VB.NET) de la même facilité de faire une collection avec les contrôles... Par exemple, avec VB6, on peut facilement créer une collection de labels : Label(0), Label(1), etc... ce qui permet de leur appliquer une même valeur, juste avec une boucle...

Ce problème, je l'avais déjà rencontré dans VBA... où faire une collection n'est pas possible... J'avais fait alors un petit code, permettant de faciliter ces manipulations (comme vider les textbox, décocher les checkbox, etc), déposé en Snippet : http://www.codyx.org/snippet_donner-valeur-dans-ensemble-meme-type-controle_528.aspx

Et bien, je présente ici la version en VB2008...

J'en attends quoi ? eh, ben, des critiques (intelligentes) pour améliorer ce code, avant de le proposer en Snippet par la suite...

L'option Strict doit être OFF, sinon cela perd de sa generalité, et de sa simplicité d'emploi...


Us.


 

Source

  • Public Property TypeControl(ByVal oObjet As Object, ByVal NameControl As String, _
  • ByVal NamePropriete As String)
  • ' DONNE UNE VALEUR A UNE PROPRIETE A L'ENSEMBLE D'UN TYPE DE CONTROLE
  • Set(ByVal value)
  • Dim cTypeControl As Control
  • For Each cTypeControl In oObjet.controls
  • If cTypeControl.GetType.Name = NameControl Then
  • Microsoft.VisualBasic.CallByName(cTypeControl, NamePropriete, Microsoft.VisualBasic.CallType.Let, value)
  • End If
  • Next
  • End Set
  • Get
  • Return Nothing
  • End Get
  • End Property
    Public Property TypeControl(ByVal oObjet As Object, ByVal NameControl As String, _
            ByVal NamePropriete As String)
        ' DONNE UNE VALEUR A UNE PROPRIETE A L'ENSEMBLE D'UN TYPE DE CONTROLE
        Set(ByVal value)
            Dim cTypeControl As Control
            For Each cTypeControl In oObjet.controls
                If cTypeControl.GetType.Name = NameControl Then
                    Microsoft.VisualBasic.CallByName(cTypeControl, NamePropriete, Microsoft.VisualBasic.CallType.Let, value)
                End If
            Next
        End Set
        Get
            Return Nothing
        End Get
    End Property

Conclusion

J'utilise CallByName, qui n'est pas non plus natif dans VB2008. Seul CType se raproche de CallByName mais n'est pas aussi puissante... et je perderai en généralité à priori...
 

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

12 septembre 2008 17:53:49 :
Un simple retour en arrière ?

Commentaires et avis

signaler à un administrateur
Commentaire de radcur le 12/09/2008 21:43:02


salut

effectivement, les collections de controles ont disparues apres VB6.  Pour la gestion des évènements sur des contrôles de même types, j'ai vu qu'on pouvait mettre plusieurs "trucs" après le handles (exemple private sub text1_click( sender... , e as ...) handles text1.click, text2.click, text3.click) et utiliser l'argument sender pour déterminer le controle source.

signaler à un administrateur
Commentaire de us_30 le 12/09/2008 21:59:24

Bonsoir,

J'avoue que je ne suis pas penché sur les événements. Mais, ta remarque est très bonne... il faudrait voir si on peut exploiter plus "sender" pour raccourcir le codage...

Sinon, il existe (évidemment) d'autre façon de faire. Gillardg propose ceci :

=

Dim tb() As TextBox = {TextBox0, TextBox1, TextBox2, TextBox3, TextBox4, TextBox5,
TextBox6, TextBox7, TextBox8, TextBox9, TextBox10, TextBox11, TextBox12}

For x = 0 To 12
tb(x).text = String.Empty
Next

=

Mais voilà, c'est long et fastidieux à coder... Sans compter, que dès qu'on change le Nom du control pour qu'il soit plus explicite, on doit retoucher aussi le code... un peu lourd, donc. Ce n'est pas le cas, dans ma proposition.

=

Par ailleurs, sur internet, j'ai vu encore une autre façon de faire pour obtenir une notation similaire à VB6... mais un peu trop sophistiqué à mon sens...

Amicalement,
Us.

signaler à un administrateur
Commentaire de mimiZanzan le 13/09/2008 02:00:04

Si je peux me permettre, j'ai déposé plusieurs sources sur ce site pour pallier au manque de groupe de contrôles sous VBA, en utilisant une classe:
   *"Création de contrôles dynamiques"
   *"Gestion Groupe de textboxs dynamiques"
   *"Gestion userform avec groupe de boutons dynamiques"
Je pense que çà peut être appliqué à VB2008, mais je ne le connais pas encore assez pour le certifier (je reste pour l'instant à VB6....)

En espérant vous être utile.

Cordialement.

signaler à un administrateur
Commentaire de Afyn le 13/09/2008 16:52:11

Il faut tout simplement regrouper les contrôles dans un objet parent.
(GroupBox par exemple)
Ou alors créer une collection (List ou Listof ...)contenant les références des objets que l'on veux indexer.

Afyn-Navedac
Le savoir faire des cancres

signaler à un administrateur
Commentaire de kml404 le 14/09/2008 03:52:06

prendre de ne pas ouvrire d'erreur dsl!!!

signaler à un administrateur
Commentaire de us_30 le 16/09/2008 21:57:42

Bonsoir,

KML404, tu as perdu ta grammaire ? -);

MiniZanZan, j'ai regardé tes progs, mais ce n'est pas directement en rapport avec le sujet... même s'il y a qlq points communs...

AFYN > oui, il existe d'autres façons de faire, et je ne les connais pas tous... Mon but, n'est pas non plus de programmer la même chose de mille et une façons différentes, mais plutôt de faire le plus simple... Néanmoins, aurais-tu un exemple simple pour les deux méthodes alternatives que tu proposes ? Merci d'avance.

Amicalement,
Us.

signaler à un administrateur
Commentaire de Afyn le 17/09/2008 15:19:31

Bonjour

Est ce que tu as regardé par là :

http://www.vbfrance.com/codes/GROUPE-CONTROLES-VB6-VISUAL-BASIC-2005-EXPRESS-EDITION_36228.aspx

Si ce n'est pas suffisamment explicite, je peux refaire
un petit projet.

A ton service

Afyn - Navedac

signaler à un administrateur
Commentaire de us_30 le 19/09/2008 23:37:05

Bonsoir Afyn,

J'ai regardé ta source. IL y a une différnce essentielle entre nos deux codes. Ce que tu proposes est, certes, une possibilité d'utilisable dans certains cas, mais a surtout besoin d'être créé dynamiquement.

Le problème que je propose de résoudre est tout de même légèrement différent, et je doute qu'il puisse être régler avec autant de souplesse en utilisant "controls.Add" ...

En effet, imagines que tu sois en train de créer une feuille (form) avec différents éléments (textbox, checbox, ou autres), et que tu veux régler certaines propriétés parmi les éléments... comment faire ?
De plus, comme tu es toujours en création, tu rajoutes, retire ou déplace des éléments... Comment faire pour ne pas avoir à retoucher au code ?

Je ne vois pas de façon plus souple que ma proposition, puisse qu'avec une seule ligne de code, on régle les propriétés d'un même type d'élément quel que soit le nombre, sans devoir citer les références explicites des éléments (ce qui est possible comme alternative, mais lourde à mettre en oeuvre.)

Si tu veux me convaincre, essayes donc de faire un petit projet, parfaitement identique (dans son principe) à mon mini-projet exemple, exposé ici... On pourra en faire une comparaison intéressante.

Amicalement,
Us.

signaler à un administrateur
Commentaire de Afyn le 20/09/2008 17:40:16

Bonjour
Je comprend pas bien ce que tu veux faire avec ton code.

Voilà une modif sur la première ligne de ton code par exemple :

    Private Sub Button1_Click(ByVal sender As System.Object, _
                              ByVal e As System.EventArgs) _
                              Handles Button1.Click
        'TypeControl(GroupBox1, "checkbox", "checked") = True
        For Each Ctl As Control In GroupBox1.Controls
            If Ctl.GetType.Name = "checkbox" Then
                Dim Cbx As CheckBox = Ctl
                Cbx.Checked = True
                Cbx = Nothing
            End If
        Next
    End Sub

Qui fonctionne et s'exécutera plus vite que ton appel ...

Mais j'avoue ne pas saisir l'utilité du code.

Peut être est ce une fausse route ?

Pourquoi ne pas grouper les controles de mëme nature ensemble si tu veux
pouvoir modifier les propriétés du groupe ?

Je suis désolé de ne pas pouvoir t'aider.

Bonne prog

Afyn . Navedac

signaler à un administrateur
Commentaire de us_30 le 21/09/2008 15:50:31

Bonjour Afyn,

Tu ne vois pas bien... hum... faudrait prendre des lunettes, alors ?... -:);

Ce que tu proposes est struturellemet identique à mon code, mais n'as pas la même généralité. En somme, c'est une version plus spécifique... Bon, pourquoi pas (d'ailleurs, j'avais commencé par là)... mais il faudrait reprendre sans le cesse le code si on veut changer un paramètre, ou si on veut utiliser un autre objet. Ma proposition reste donc plus simple... Si tu voulais simplifier et généraliser ton code, tu obtiendrais vraisemblablement un codage très proche de ma proposition, donc... Seul hic, c'est que CALLBYNAME n'est pas natif, et GETTYPE remplace que partiellement cette dernière fonction... En terme de performance, c'est pas un enjeu ici.

A+

Amicalement,
Us.

signaler à un administrateur
Commentaire de medkarim le 13/10/2008 22:40:51

Pour ajouter de l'eau au moulin
http://msdn.microsoft.com/fr-fr/library/kxt4418a.aspx

signaler à un administrateur
Commentaire de Afyn le 14/10/2008 14:39:28

Oui trés bien.

Tout a été dit / écrit sur ce sujet.

Chacun fait fait fait ...

Yop Yop

Afyn - Navedac

signaler à un administrateur
Commentaire de us_30 le 15/10/2008 19:05:07

Bonsoir à tous,

Effectivement, l'adresse est bonne, et il semble qu'on puisse adapter un codage natif en VB2008, avec Control.ControlCollection. Dès que j'aurai du temps, j'approndirai la question. Merci, donc pour cette piste, que justement je cherchais...

Amicalement,
Us.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

control [ par keks ] Bonjour tout le monde,J'ai une Form qui contient une centaine TextBox. Existe-t-il un moyen de récupérer leur valeur dans une boucle plutôt que de tap [VBA excel] Question avec un userform (locker valeur d'un textbox) [ par annyong ] Bonjour,J'ai une petite question liée au Userform :- J'ai une textbox dont j'ai grisé le fond, car je voudrais juste renseigner l'utilisateur avec la Même valeur dans 2 TextBox et dans 2 UserForm [ par avyrex1926 ] Bonjour à tous, Suite à quelques recherches, je n'ai pas réussit à trouver sur ce à quoi je voudrais faire faire à mon document. Aide sur le masked textbox [ par klingfilm ] Rebonjour a tous,J' ai un petit probleme a utiliser le masked textbox. En fait je veux ecrire un nombre a 3 chiffres apres la virgule, avec comme prem checkbox Access [ par ViBa ] Bonjour à tous,j'ai un grand soucis. J'ai 10 checkbox dans un formulaire access. j'aimerai que:5 checkbox renvoient chacune la même valeur 10 dans un valeur d'un textbox [ par petiflamand ] Bonjour , je voudrais savoir comment je doit faire pour mettre la valeur d'un textbox dans une variableen effet je fait Text1 = (ns3(i) * Val(Text6)) recherche d'une valeur dans excel [ par bipbip059 ] bonsoir à tousSur mon userform j'ai placé quatre textbox 1,  2, 3, et 4 la valeur de la textbox 1 est transférée sur la feuille excel colonne A, la va Calculer la somme de valeur de X Textbox donne [ par Mayno_123 ] Salut tout le monde, Je veux calculer la valeur< aficher solution label [ par DjMedz ] Bonjour, je fais un programme qui doit compter la valeur d'une textbox * la valeur d'une autre textbox et l'afficher dans une autre textbox...  ex: 4 Garder la valeur d'un textBox [ par elect31 ] BonjourSous VB2005 edition expressDans un form:Je souhaiterai garder la valeur entrée par un utilisateur dans un textBox. Ce dernier est vide à la 1°


Nos sponsors

Sondage...

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,577 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é.