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 :

Utiliser le contenu d'une variable pour accéder à un contrôle


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut Utiliser le contenu d'une variable pour accéder à un contrôle
    Bonjour,

    Je voudrais savoir s'il est possible dans le genre de l'exemple qui suit :

    Avec une form frmEx qui contient un bouton btnEx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Public Class frmEx
     
       Private Sub frmEx_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
          Dim str_var as String = "btnEx"
          Me.str_var.text = "Le text qui va bien" 'cette ligne ne compile évidemment pas 
       End Sub
     
    End Class
    Bref, je ne sais pas trop s'appelle ce que je cherche à faire (et du coup, j'ai du mal à trouver des infos dans google...) mais ce serait d'utiliser le contenu d'une variable pour accéder à un contrôle.

    Alors bien sûr, ici dans l'exemple, j'aurais pu faire Me.Controls(str_var) = "Le texte qui va bien" mais dans la pratique, le bouton ne sera pas forcément un enfant direct du contrôle form.

    Ce genre de chose est-il possible ?

    Merci d'avance.

    P.S. : Si mes souvenirs d'école sont justes (rien n'est moins sûr), il me semble qu'en C++, si on mettait un caractère (je ne sais plus lequel) devant le nom de la variable, cela faisait ce que je cherche à faire.

    P.P.S. : J'imagine que c'est un bug connu mais il semblerait que la balise codeinline ait des problèmes avec l'édition et la prévisualition des changements.

  2. #2
    Membre très actif
    Homme Profil pro
    Retraité intello
    Inscrit en
    Juillet 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité intello

    Informations forums :
    Inscription : Juillet 2012
    Messages : 186
    Par défaut
    Bonjour.

    Il existe en Vb6 une procédure nommée CallByName, qui est maintenue en Vb.net (mais qui pourra dire jusqu'à quand), et qui pourrait peut-être faire votre affaire.

    Bonne chance.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194
    Par défaut
    Une petite fonction récursive.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub FindControl( c As Control, name As String) As Control
        If (c.Name = name) Return c;
        Else 
            If (c.Controls <> Nothing)
                Dim controlFound As Control
                For Each (control in c.Controls)
                    controlFound = FindControl(control,name);
                    If (controlFound <> Nothing) Return controlFound 
                Next
            End If
        End If
        Return Nothing
     
    End Sub

  4. #4
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    C'est tellement "con"... J'aurais du y penser !!

    Merci !

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonjour,
    on peut également utiliser la fonction find avec recherche dans les contrôles conteneurs enfants du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            Dim returnCtrl As Control()
            returnCtrl = Me.Controls.Find("btnEx", True)
            ' true pour chercher dans les conteneurs enfants
     
            If returnCtrl.Count > 0 Then
                returnCtrl(0).Text = "Le texte qui va bien"
            End If

  6. #6
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Citation Envoyé par chrismonoye Voir le message
    Bonjour,
    on peut également utiliser la fonction find avec recherche dans les contrôles conteneurs enfants du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            Dim returnCtrl As Control()
            returnCtrl = Me.Controls.Find("btnEx", True)
            ' true pour chercher dans les conteneurs enfants
     
            If returnCtrl.Count > 0 Then
                returnCtrl(0).Text = "Le texte qui va bien"
            End If
    Ah bin je ne la connaissais pas encore celle-là. C'est vrai que c'est encore plus simple.

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

Discussions similaires

  1. [XL-2003] Utiliser le contenu d'une variable en VBA
    Par Adweuz dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/07/2012, 15h33
  2. Réponses: 1
    Dernier message: 20/06/2012, 14h07
  3. Utilisation du contenu d'une variable
    Par titan66 dans le forum ActionScript 3
    Réponses: 4
    Dernier message: 11/04/2011, 08h31
  4. Réponses: 1
    Dernier message: 18/12/2008, 09h56
  5. Réponses: 9
    Dernier message: 25/06/2008, 16h48

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