IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Modifier dynamiquement les propriétés d'objets


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 125
    Par défaut Modifier dynamiquement les propriétés d'objets
    Bonjour,

    J'ai plusieurs objets sur la forme (des TextBox), avec des noms comme TB_Led_1, TB_Led_2, TB_Led_3, ... TB_Led_12.

    Je veux faire clignoter certains de ces TextBoxes, selon que l'utilisateur ait cliqué sur des boutons (chaque TextBox est associé à un bouton).
    J'ai aussi un Timer, et je voudrais faire clignoter certaines des TextBox, selon que les boutons associés ont été cliqué ou pas.

    Donc, plutôt que de faire 12 fois le même code, je voudrais faire quelque chose de plus propre.

    J'ai donc essayé avec le CallByName :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            For i As Integer = 1 To 12
                If Bouton(i) Then
                    If CallByName("TB_Led_" & i.ToString, "BackColor", CallType.Get) = Color.White Then
                        CallByName("TB_Led_" & i.ToString, "BackColor", CallType.Set) = Color.Orange
                    Else
                        CallByName("TB_Led_" & i.ToString, "BackColor", CallType.Set) = Color.White
                    End If
                End If
            Next
    Mais ça ne fonctionne pas (normal, sinon je ne serai pas là).
    J'ai le message d'erreur suivant :
    {"Le membre public 'BackColor' du type 'String' est introuvable."}

    Pourtant, le site Microsoft m'indique :
    Le CallByName fonction vous permet d’utiliser une chaîne pour spécifier une propriété ou méthode en cours d’exécution.
    Or le BackColor est bien une propriété de l'objet TextBox TB_Led_1 (et de ses petits frères).

    Merci d'avance pour votre aide

  2. #2
    Membre expérimenté Avatar de Delaney
    Homme Profil pro
    Developpeur VB amateur
    Inscrit en
    Mars 2014
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Developpeur VB amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 148
    Par défaut
    Bonsoir

    Le problème vient de la déclaration de ta textbox. La fonction callByName attend un object et non une string donc "TB_Led_" & i.ToString n'est pas correct
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CallByName("TB_Led_" & i.ToString, "BackColor", CallType.Set) = Color.Orange
    de plus, si tu veux chnager la couleur alors il faut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CallByName(TB_Led_1, "BackColor", CallType.Set,Color.Orange)
    le mieux est de mettre tes TextBox dans un array et appeler les membres.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim list_TB(9) As TextBox
     
            list_TB(1) = TB_Led_1
            list_TB(2) = TB_Led_2
    etc..
    CallByName(list_TB(i), "BackColor", CallType.Set, Color.Orange)
    mais du coup tu n'as plus besoin du CallByName, tu peux faire directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list_TB(i).BackColor = Color.Orange

  3. #3
    Membre expérimenté Avatar de Delaney
    Homme Profil pro
    Developpeur VB amateur
    Inscrit en
    Mars 2014
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Developpeur VB amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 148
    Par défaut
    en cadeau petit code pour mettre facilement toutes tes TB_Led dans la liste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public list_TB_Led(n) As TextBox
    For i = 1 To n
                For Each elem In Me.Controls
                    If elem.Name = "TB_Led_" & i.ToString Then
                        list_TB_Led(i) = elem
                        exit for
                    End If
                Next
            Next

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 125
    Par défaut
    Excellent, merci beaucoup

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    Citation Envoyé par Elthorn Voir le message
    en cadeau petit code pour mettre facilement toutes tes TB_Led dans la liste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public list_TB_Led(n) As TextBox
    For i = 1 To n
                For Each elem In Me.Controls
                    If elem.Name = "TB_Led_" & i.ToString Then
                        list_TB_Led(i) = elem
                        exit for
                    End If
                Next
            Next
    ce code est contre optimisé
    tu vas faire n fois le parcours de tous les éléments du form




    le mieux c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.controls("TB_Led_" & i.ToString).backcolor
    pas de boucle ca accès directement au bon controle
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 125
    Par défaut
    C'est encore mieux !

    Edit après test :
    Ah ben non, c'est pas mieux...

    Une exception non gérée du type 'System.NullReferenceException' s'est produite dans MonProgramme.exe
    Informations supplémentaires*: La référence d'objet n'est pas définie à une instance d'un objet.

  7. #7
    Membre expérimenté Avatar de Delaney
    Homme Profil pro
    Developpeur VB amateur
    Inscrit en
    Mars 2014
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Developpeur VB amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 148
    Par défaut
    Citation Envoyé par jjcasalo Voir le message
    C'est encore mieux !

    Edit après test :
    Ah ben non, c'est pas mieux...
    C'est à quel niveau que ça fonctionne pas ? tu peux nous envoyer le morceau de code?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 24/03/2015, 11h53
  2. Réponses: 7
    Dernier message: 14/11/2007, 19h40
  3. Réponses: 4
    Dernier message: 26/07/2007, 13h07
  4. Modifier dynamiquement les On"qqchose"?
    Par steinfield dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/06/2007, 15h12
  5. Réponses: 3
    Dernier message: 06/10/2005, 13h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo