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 :

Manipulation de Controls par leurs noms


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 24
    Par défaut Manipulation de Controls par leurs noms
    Bonjour,

    J'ai une dizaine de CheckBox et je voudrais afficher les boutons correspondant lorsqu'il y en a une ou plusieurs de cochées.
    Voici mon code qui ne fonctionne pas
    La conversion de la chaîne en type 'Integer' n'est pas valide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                    For n = 1 To 10
                        If CType(Controls("CheckBox" & n), CheckBox).Checked Then
                                Controls("Button" & n).Visible = True
                        End If
                    Next n
    Merci d'avance pour votre aide.

  2. #2
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Salut,

    Ici tu veux concaténer une chaîne de caracteres ("Button", type String) avec un nombre (n, type Integer), seulement on ne peut pas..

    Utilise n.ToString(), chaîne de caractères qui represente ton chiffre.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 141
    Par défaut
    Utilise la méthode "TryParse()" pour convertir une string en int.

  4. #4
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    La conversion de la chaîne en type 'Integer' n'est pas valide.
    Visual Studio croit que l'on veut convertir "Button" en Integer (TryParse ok) mais je pense que ce que JulieF veut faire c'est plutôt convertir "n" en String pour avoir par exemple "Button1", "Button2", etc et ainsi pouvoir appeler le controle par son nom et non son index.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 24
    Par défaut
    Merci pour vos réponses rapides, mais :

    Avec n.ToString(), j'ai toujours la même erreur (j'avais d'ailleurs essayé avec Cstr)

    Je n'ai pas la fonction TryParse(), j'ai oublié de préciser que je suis en Compact Framework 3.5

    Je ne pense pas que le problème vienne de ma variable n.
    Lorsque je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Dim MaVariable As String = "Label1"
            Me.Controls(MaVariable).Text = "COUCOU"
    J'ai aussi la même erreur :
    La conversion de la chaîne "Label1" en type 'Integer' n'est pas valide.

  6. #6
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Ca n'est pas possible ce que tu souhaites faire
    Il faut bien comprendre qu'au moment ou tu compiles le nom "Button1" que tu lui donnes, n'existe plus!
    Tu peux par contre manipuler des listes d'éléments

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 24
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    Il faut bien comprendre qu'au moment ou tu compiles le nom "Button1" que tu lui donnes, n'existe plus!
    Je ne comprends pas. Mes Boutons existent bien puisqu'ils sont créés sur le formulaire dans Visual Studio. Et mon code fonctionne si je le fais Bouton par Bouton. Mais je voudrais faire un boucle pour réduire le nombre de ligne de code.
    N'est-il pas possible d'appeler un Objet par son nom via une variable ?

  8. #8
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Button1.Name = "test"
            Dim b = Controls("test")
    Chez moi ça marche..

  9. #9
    Membre émérite

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Par défaut
    Salut

    tu peux te servir du tag des checkbox et button

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Private Sub WriteTag()
            Dim markbutton, markcheckbox As Integer
     
            markbutton = 1
            markcheckbox = 1
            For Each ctrl As Control In Me.Controls
                If TypeOf ctrl Is Button Then
                    DirectCast(ctrl, Button).Tag = markbutton
                    markbutton += 1
                End If
                If TypeOf ctrl Is CheckBox Then
                    DirectCast(ctrl, CheckBox).Tag = markcheckbox
                    markcheckbox += 1
                End If
            Next
        End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     Private Sub ShowButtons()
            For Each ctrlchb As CheckBox In Me.Controls
                If ctrlchb.Checked Then
                    For Each ctrlb As Button In Me.Controls
                        If ctrlchb.Tag.ToString = ctrlchb.Tag.ToString Then
                            ctrlchb.Visible = True
                        End If
                    Next
                End If
            Next
        End Sub

  10. #10
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Citation Envoyé par JulieF Voir le message
    Je ne comprends pas. Mes Boutons existent bien puisqu'ils sont créés sur le formulaire dans Visual Studio. Et mon code fonctionne si je le fais Bouton par Bouton. Mais je voudrais faire un boucle pour réduire le nombre de ligne de code.
    N'est-il pas possible d'appeler un Objet par son nom via une variable ?
    Et bien non, quand tu compiles, le compilateur transforme le nom que tu avais donné à ta variable en une adresse mémoire et travaille uniquement avec ceci. Tu peux l'appeler Toto1 ou Toto2, lui n'utilisera plus ces noms

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

Discussions similaires

  1. chart : manipuler des series par leurs noms
    Par petitours dans le forum C#
    Réponses: 2
    Dernier message: 16/03/2012, 08h56
  2. Réponses: 9
    Dernier message: 21/06/2007, 16h02
  3. [VBA]filtrage des controles sur leur nom
    Par Invité dans le forum VBA Access
    Réponses: 5
    Dernier message: 17/04/2007, 14h23
  4. Tuer des processus par leur nom
    Par tedparker dans le forum Access
    Réponses: 2
    Dernier message: 12/09/2006, 16h19
  5. Récupérer un control par son nom
    Par Didier L dans le forum Delphi
    Réponses: 4
    Dernier message: 23/05/2006, 19h59

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