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 :

Question peut être bête - Dictionnaire [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2022
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2022
    Messages : 76
    Par défaut Question peut être bête - Dictionnaire
    Bonjour à tous,

    Est-il possible de faire pointer directement une variable (de nom défini fixe) vers l'adresse d'une autre variable créée en amont en n'ayant que le nom de cette dernière dans une string ?
    Existe-t-il une méthode genre AdressOf qui ferait pointer ma variable fixe vers la variable dont j'obtiens le nom dans une string ?
    En gros, le même genre de comportement que Me.Controls("blablabla") pour les controls.

    Ou faut-il passer par la déclaration d'un dictionnaire, le remplir et faire : variable fixe = dictionnaire.item("StringduNomdelaVariable") ?

    Autre question, s'il faut passer par un dictionnaire, si je modifie ma variable "fixe", est-ce que la variable en amont (son nom dans la string) subit les mêmes modifications ?

    Je vous remercie de toutes vos aides.

  2. #2
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 579
    Par défaut
    Bonjour,
    Qu'entends tu par variable créée en amont?
    Un exemple contextuel serait le bienvenu.

  3. #3
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2022
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2022
    Messages : 76
    Par défaut
    Bonjour Thumb down,

    En fait, je récupère le nom de la variable qui m'intéresse en fonction d'éléments en amont.
    Son nom est dans une string.
    Et ensuite, je veux atteindre le contenu de cette variable.

    Un peu comme on le fait avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Controls("Button" & i.ToString)
    par exemple pour un bouton.

    Je me suis renseigné, il y a les dictionnary.
    Mais je me demandais s'il n'existait pas une méthode plus directe.
    Peut-être qui utilise les adresses... genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AddressOf("NomVariable" & i.ToString)
    ?

    Je ne sais pas.
    Tout ce que j'ai trouvé ce sont les dictionnaires.

  4. #4
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 579
    Par défaut
    Désolé, mais j'ai l'impression d'être une personne âgé à qui on répète la même phrase en augmentant la voix pour palier à sa sourdité !

    Tu déclarer une variable quelque part et ensuite tu est capable de transmettre son nom et pas la variable ????

    Je réitère ma demande, peux-tu nous donner un exemple de code qui materialiserait ton problème ?

    C'est tellement facile de passer une variable en paramètres,que je ne comprends pas ta demande

    En fait tu nous exposes ta solution et pas ton problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Controls("Button" & i.ToString)

  5. #5
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2022
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2022
    Messages : 76
    Par défaut
    Thumb down,

    Désolé, mais j'ai l'impression d'être une personne âgé à qui on répète la même phrase en augmentant la voix pour palier à sa sourdité !


    Désolé, en fait si je n'ai pas mis le code, c'est parce qu'il est assez long, sur plusieurs modules, et je ne voulais pas charger le post.

    En gros, je déclare 6 ArrayList, une par CheckedListBox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private List1, List2, List3, List4, List5, List6 As New ArrayList
    Ces ArrayList recevront les CheckedIndices de la CheckedListBox concernée dès l'évènement .ItemCheck activé.
    Le traitement sur chaque CheckedListBox et sur les ArrayList est identique, donc j'ai standardisé le traitement pour ne pas multiplier le code 6 fois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     Private Sub SSCLBoxCochageChange(SSCLBox As CheckedListBox, e As EventArgs) Handles CheckedListBox11.ItemCheck, CheckedListBox12.ItemCheck, CheckedListBox13.ItemCheck, CheckedListBox14.ItemCheck, CheckedListBox15.ItemCheck, CheckedListBox16.ItemCheck
     
            'Charge la liste des éléments validés
            ListClick.Clear()
            ListClick.AddRange(SSCLBox.CheckedIndices)
     
            Exit Sub
     
        End Sub
    Chaque CheckedListBox est différente en termes de données et de volumes de données. Donc chaque ArrayList va être différent sur ce plan.
    Le traitement reste le même pour toutes, seule change au final le numéro de la CheckedListBox sélectionnée.

    J'ai donc créé qu'un seul évènement lié à .ItemCheck pour l'ensemble des 6 CheckedListBox.
    Et en fonction du numéro de la CheckedListBox sélectionnée, je sais quel ArrayList doit être utilisé et rempli.

    Je crée donc un ArrayList générique (ListCheck) que je veux lier temporairement au bon ArrayList concerné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListClick As New ArrayList
    Et je veux traiter l'info contenu dans ce ListClick.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     With DirectCast(Me.Controls("CheckedListBox1" & NumFlecheClick.ToString), CheckedListBox)
                        'Gèle les évènements de la SSCLBox concernée pour ne pas modifier ListClick
                         RemoveHandler .ItemCheck, AddressOf SSCLBoxCochageChange
     
                        For Each Index As Integer In .CheckedIndices
                            .SetItemCheckState(Index, False)
                        Next
                        For Each Index As Integer In ListClick
                            .SetItemChecked(Index, True)
                        Next
    End With
    Mon soucis, c'est que je n'ai accès au ArrayList concerné que par construction de son nom ("List" & NumFlecheClick.ToString).
    Et je dois l'associer à ListCheck générique pour traitement.

    Du coup, j'ai créé un dictionnaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private DictionnaireList As New Dictionary(Of Integer, ArrayList)
    Je l'ai rempli pour faire correspondre le numéro de la CheckedListBox sélectionnée (contenu dans NumFlecheClick) à la bonne ArrayList :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'Incrémente le dictionnaire de ArrayList
            DictionnaireList.Add(1, List1)
            DictionnaireList.Add(2, List2)
            DictionnaireList.Add(3, List3)
            DictionnaireList.Add(4, List4)
            DictionnaireList.Add(5, List5)
            DictionnaireList.Add(6, List6)
    Et ensuite je fais le lien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     'Pointe vers la bonne ArrayList
                    ListClick = Nothing
                    ListClick = DictionnaireList.Item(NumFlecheClick)

    Je demandais juste s'il existait une méthode plus directe ?
    Peut être avec un pointage directement sur l'adresse de la bonne ArrayList ?
    Ou s'il fallait passer forcement par un dictionnaire comme je l'ai fait.

    Bien à toi

  6. #6
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonsoir,

    Depuis le début, le problème énoncé (si on peut dire) me fait penser à l'usage des pointeurs en C. Ils permettent de passer l'adresse d'une variable plutôt que sa copie.
    Lors de la définition des paramètres en VB.Net, l'emploi des "vitamines" ByRef ou ByVal permet aussi de faire la différence entre le contenu d'une variable et sa copie. Cela est vrai pour les types de base et les chaînes qui sont ByVal par défaut (je crois). Sauf erreur de ma part, l'opérateur AddressOf ne sert pas de pointeur de variable.

    Peut-être que ceci se rapporte au problème....

  7. #7
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 579
    Par défaut
    et comme ça?
    Code List(0-5) : Sélectionner tout - Visualiser dans une fenêtre à part
    Private List() As ArrayList = {New ArrayList, New ArrayList, New ArrayList, New ArrayList, New ArrayList, New ArrayList}

  8. #8
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2022
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2022
    Messages : 76
    Par défaut
    Merci Thumb Doxn !

    En fait, je ne savais pas qu'on pouvait faire des Lists de Lists indépendantes.
    Ca répond exactement à mon problème, qui n'en était pas un finalement...

    Désolé de t'avoir fait passer pour un vieux

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

Discussions similaires

  1. Question peut être inutile
    Par harmonips dans le forum Images
    Réponses: 0
    Dernier message: 24/04/2012, 05h49
  2. petite question, peut-être très simple
    Par BigColino dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 15/02/2012, 11h53
  3. [Smarty] Question peut-être simple ?
    Par winnyzeboss1 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 31/05/2010, 13h07
  4. Peut - être Bête .mais primordiale
    Par widom dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/05/2007, 11h21
  5. question (peut-être idiote) sur les vues
    Par LadyArwen dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/03/2003, 10h35

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