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 :

Nommer une variable à partir de la valeur d'une autre variable (évaluer, concaténer)


Sujet :

VB.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Points : 41
    Points
    41
    Par défaut Nommer une variable à partir de la valeur d'une autre variable (évaluer, concaténer)
    Bonjour,
    Je suis débutant (donc, merci d'avance pour votre compréhension
    Voila, j'ai jusqu'à présent programmé en ActionScript, et je veux porter mon application en VB.

    En ActionScript, je pouvais déclarer dynamiquement une variable et lui donnant une valeur extraite d'une autre variable (concaténation).
    Je lisais un fichier XML comprenant: 'nom de l'article', 'valeur', 'poids', 'couleur',...
    et je pouvais, à la volée, créer un tableau (à moins que ce ne soit un objet avec des propriétés?!), dont l'écriture se faisait ainsi:

    * la variable 'article' récupère la valeur venant d'un fichier xml
    article = this.firstChild.attributes.name
    (ex: article= avion)
    * cette valeur est alors utilisée dans la déclaration d'un nouvel objet, portant comme nom la valeur de cette variable
    _root[article] = {poids:Xmlpoids, couleur:Xmlcouleur, prix:Xmlprix};

    Sur Flash, cette concaténation se faisait par l'usage des [] autour du nom.
    Quand on agit de cette façon dans Flash, que ce soit pour lire ou écrire, le texte compris entre les [] est alors évalué comme étant le nom de l'objet/variable/tableau

    Remarqué également qu'au passage, des propriétés sont créées (poids,couleur,prix) et remplies des valeurs venant du fichiers XML


    Donc..;-) comment puis arriver à cette même "souplesse" avec VB: créer un objet dynamiquement, en le nommant (en l'évaluant) à partir d'une valeur d'une autre variable...et en lui créant/attribuant des propriétés au passage?!
    (et si ce n'est pas possible, comment dois-je m'y prendre autrement?)

    Je vous remercie de m'avoir lu, j'espère que j'ai été clair...et d'avance merci pour votre aide!

  2. #2
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 682
    Points : 1 952
    Points
    1 952
    Par défaut
    Heureusement que c'est possible
    Plusieurs manieres de faire cela, mais perso j'utilise le cast
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DirectCast(Me.Controls("TextBox" & "_cequetuveux_" & x.ToString), TextBox).Text = "bla bla bla"
    Idem pour toutes les proprietes.

  3. #3
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 682
    Points : 1 952
    Points
    1 952
    Par défaut
    J'avais oublie pour la creation dynamique des objets
    Un exemple parmis tant d'autres que tu pourras trouver sur le forum
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    dim o as objet
    dim image as picturebox
    dim form0 as form
    dim i as integer = 0
     
    Private Sub b_CréerObjet_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_CréerObjet.Click
     
            i += 1
     
            'création d'un nouvel objet
            o = New objet
            o.name = "objet" & "(" & i & ")"
     
            'Création d'une image objet
            image = New PictureBox
     
            With image
                .Name = "image" & "(" & i & ")"
                .ClientSize = New Size(80, 80)
                .SizeMode = PictureBoxSizeMode.StretchImage
                .ImageLocation = "...\ismart.jpg"
                .Top = 71
                .Left = 420
            End With
     
            Me.Controls.Add(image)
     
            'création et affichage de la form
            form0 = New ParametreAutom
            form0.Name = "form " & "(" & i & ")"
            form0.Text = "Ajouter un objet"
            form0.Show()
     
        End Sub

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par Danyel Voir le message
    Heureusement que c'est possible
    Plusieurs manieres de faire cela, mais perso j'utilise le cast
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DirectCast(Me.Controls("TextBox" & "_cequetuveux_" & x.ToString), TextBox).Text = "bla bla bla"
    Idem pour toutes les proprietes.
    Tout d'abord, Danyel, un grand merci pour ta réponse!
    Et en effet, cela marche...(Merci!!)
    DirectCast(Me.Controls("TextBox" & "_cequetuveux_" & x.ToString), TextBox).Text = "bla bla bla"
    si l'objet a été créé avant!

    Or, si j'utilise le code qui suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Dim o As Object
     'création d'un nouvel objet
     o = New Object
     o.name = "taratata"
    Cela ne plait pas à VB, qui me dit:
    Le membre public 'name' du type 'Object' est introuvable
    Donc, sans vouloir que vous fassiez le travail à ma place ;-), pourriez vous m'indiquer le code qui collerait le plus à ce que je pouvais faire dans Flash (en résumé: se servir d'un string, pour CREER un objet du même nom que le string, et pouvoir lui ajouter des attributs particuliers (propriétés/méthodes? j'ignore le terme exact, dsl) dès la création)

    d'avance merci!!

  5. #5
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 682
    Points : 1 952
    Points
    1 952
    Par défaut
    Tu peux directement effacer ces 3 lignes qui ne servent a rien
    En fait, c'est ici qui faut que tu changes selon l'objet que tu veux creer :
    un picturebox dans l'exemple itinial
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newobjet = New PictureBox
    ou pour un textbox
    ou tout autre objet (remplacer xxx)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Points : 41
    Points
    41
    Par défaut
    J'ai peur d'insister!!
    Mais pour moi ce n'est toujours pas clair...comment puis je, à partir d'une valeur présente dans une variable (avion="airbusA330"), construire dynamiquement un objet qui porterait comme nom la valeur de cette variable: airbusA330 (donc, que je puisse ensuite 'parler' à cet objet en utilisant le mot 'airbusA330')
    Il y aura plus ou moins 10.000 'objets' à créer de cette façon!
    Je dois ajouter que cet objet devra avoir des propriétés, tels que poids, couleur, etc..de sorte que je puisse pouvoir demander, par exemple:
    Label1.Text= airbusA330.poids (qui donnerait par ex. "12000"(kg))
    ou
    Label2.Text= boing747.couleur (qui donnerait par ex. "rouge")


    Le problème majeur pour moi est maintenant de savoir comment créer dynamiquement le nom de cet objet, car pour le reste (la question des différentes propriétés) je crois savoir que je pourrais utiliser les 'dictionary'..qu'en penses tu? J'ai essayé ceci et cela marche très bien:
    Dim x As New Dictionary(Of String, String) From {{"poids", varpoids}, {"couleur", varcouleur}}
    Qui me permet de faire:
    Label1.Text = x("poids")...qui me retourne la valeur de la variable varpoids
    Merci de ton aide..et de ta patience

  7. #7
    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 : 38
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Créer des variables dynamiquement comme ca c'est pas trop possible.
    Il faut pas s'y prendre comme ca. Par exemple les stocker dans un conteneur (dictionnaire ou autres).

    Un Dictionnaire de Dictionnaire pourrait marcher.

  8. #8
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 682
    Points : 1 952
    Points
    1 952
    Par défaut
    Effectivement ce ne sont pas des vrais objets que tu veux creer (bouton/texbox/...), mais plutot une multi-collection de datas texte dirait-on.
    Donc, il est clair que les dictionnaires correspondent mieux à ta demande.
    Tu peux aussi creer un control perso en lui attribuant tous les settings que tu veux.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Points : 41
    Points
    41
    Par défaut
    Merci à tous pour votre aide!!
    Et pour ceux que cela intéresse, voici la solution que j'ai retenu:
    (reprenez moi si je me trompe sur les termes...ou si ma solution peut encore être améliorée, svp)

    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
    17
    18
    19
    20
    21
    22
     
    'Création d'une classe -avions-  et de ses "attributs": nom, poids,descrip,...
    Public Class avions
        Public nom As String
        Public poids As String
        Public descript As String
        Public favorite As Boolean
        Public userHave As Boolean
    End Class
     
    'Création d'un objet dictionnaire, qui va "pairer" une variable texte avec un objet -avions- (et donc tous ses attributs qui l'accompagne)
    Dim avionsDB As New Dictionary(Of String, avions)
     
    'Ceci est pour l'exemple
    Dim an As String = "AirbusA330"
    Dim ap As String = "12000"
    Dim ad As String = "description de l'avion, blablabla"
    Dim fav As Boolean = False
    Dim have As Boolean = False
     
    'On ajoute au dictionnaire le nom de l'avion (an) qui va être "pairé" avec un objet -avions- dont on donne les attributs
    avionsDB.Add(an, New avions() With {.nom = an, .poids = ap, .descript = ad, .favorite = fav, .userHave = have})
    Par exemple:
    TextBox1.Text = avionsDB(AirbusA330).descript
    donnerait "description de l'avion, blablabla"

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 31/05/2015, 20h57
  2. Réponses: 3
    Dernier message: 21/02/2014, 10h29
  3. Extraction d'une liste à partir de la valeur d'une cellule
    Par lps02 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/07/2012, 20h07
  4. Réponses: 4
    Dernier message: 29/04/2006, 22h35
  5. afficher dans une boite de dialogue la valeur d'une variable
    Par micknic dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 10/07/2005, 09h25

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