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 :

Variable As New List (Of T) compte 0 [Débutant]


Sujet :

VB.NET

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 4
    Par défaut Variable As New List (Of T) compte 0
    Bonjour à tous,

    J'ai trouvé nombreuses réponses à mes questions sur le forum mais pour celle là, je ne trouve pas. Quoi qu'il en soit, j'espère ne pas poster au mauvais endroit.

    Voici mon problème :
    J'ai un module où j'ai une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public User As New List(Of Perso)
    Perso est une classe publique.

    Sur un formulaire "ChargerPersonnes" j'ai une ListBox et une ListView où il y a les mêmes informations (je préfère la mise en page de la listview d'où sa présence, bref) et un bouton.
    Ce bouton crée une TabPage (qui est définie) dans une nouvelle form "Personnes" pour chaque item sélectionné.


    Sur chacune des TabPages, il y a un bouton. Ce bouton est censé appeler une procédure mais j'ai continuellement un problème d'index. Le code du bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Private Sub Bouton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bouton.Click
            User(Personnes.TabControl1.SelectedIndex).MaProcédure()
        End Sub
    User.Count est constamment égal à 0. Je n'arrive pas à régler ça. Si vous avez des idées.

    Bharda.

  2. #2
    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,

    Ce serait le code utilisé pour le remplissage de User que tu devrais poster. Le code que tu présentes dans ton message ne nous donne aucune chance de comprendre pourquoi User.Count vaut 0.

    Si ton projet n'est trop lourd, peut-être peux-tu en poster le zip ...


  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 4
    Par défaut
    Salut Phil,

    Alors justement c'est une question que je me suis posé, mais je n'aurais pas de réponse précise à te donner. Si je comprends bien, la liste reste vide à chaque fois. Cependant, j'avais vu une utilisation sur un projet dans lequel la variable définie comme List(Of T) ne donne jamais d'infos sur le remplissage. Donc je me suis dit, ça peut passer . Voudrais-tu que je retrouve le projet ?

    Mais sauf erreur de ma part on peut appeler une classe dans cette List(Of...).


    Par exemple j'ai une classe Perso, dans laquelle j'ai une méthode MaProcedure() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Class Perso
         Public Sub MaProcedure()
         End Sub
    End Class
    Du coup avec cette variable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public User As New List(Of Perso)
    Je suis censé pouvoir faire ça (avec x un quelconque entier), non ?


    Quant à mon projet, je peux essayer de le refaire en enlevant des données "sensibles" ou le simplifier, si vraiment tu en as besoin.

  4. #4
    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
    Ce que tu montres me paraît très correct.
    Il te reste donc à montrer comment tu places tes "Perso" dans la liste User.
    Fais-tu quelque chose rassemblant à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     '...
    Dim UnePersonne As New Perso
    User.Add(UnePersonne)
    '...
    C 'est dans cette partie du code que j'espère trouver la raison du ...Count = 0.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 4
    Par défaut
    Gloire à Phil Rob!

    En effet, c'est une ligne que je n'avais pas écrite. Je pensais que ça aurait créé une entité physique qui aurait gêné mon interface au moment où je chargeais les personnes sélectionnées dans la Listview.

    Mais en réalité, ça crée une sorte de collection non ?

    Donc l'erreur de User.Count = 0 n'est plus, mais j'ai une erreur sur la ligne quand même (qui selon moi venait de Count = 0, j'avais tort) - Erreur : L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    User(Personnes.TabControl1.SelectedIndex).MaProcedure()
    J'ai vérifié que Personnes.TabControl1.SelectedIndex rendait le bon index via une MessageBox


    Merci Phil pour ton aide.

  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
    Mais oui, il s'agit bien d'une collection ...
    C'est effectivement à toi d'indiquer que le problème est résolu.
    Bonne continuation ...


  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 4
    Par défaut
    J'ai édité mon message pendant ta réponse, pardon je vais le citer du coup.

    Donc l'erreur de User.Count = 0 n'est plus, mais j'ai une erreur sur la ligne quand même (qui selon moi venait de Count = 0, j'avais tort) - Erreur : L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    User(Personnes.TabControl1.SelectedIndex).MaProcedure()
    J'ai vérifié que Personnes.TabControl1.SelectedIndex rendait le bon index via une MessageBox

  8. #8
    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
    Oui, comme dans toutes les collections, l'indice peut varier de 0 à Count-1. Si collection est vide, Count-1 vaut -1 et c'est un indice non valide : comment pourrait-on désigner un élément qui n'existe pas !
    Le balayage d'un collection avec une boucle For qui donne un indice de 0 à Count-1 (For I = 0 To ....Count-1) permet d'éviter la valeur -1 en cas de collection vide. Une autre boucle peut-être très utile (si on n'a pas besoin de l'indice), c'est la boucle For Each ...


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

Discussions similaires

  1. Variable de type liste
    Par fabaroulettes dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/12/2006, 10h53
  2. PHP Passer une variable via une liste deroulante
    Par lepierre dans le forum Langage
    Réponses: 3
    Dernier message: 20/10/2006, 12h09
  3. Réponses: 2
    Dernier message: 10/06/2006, 17h13
  4. Réponses: 2
    Dernier message: 05/06/2006, 17h51
  5. recuperer une variable d'une liste deroulante
    Par aude_1603 dans le forum Langage
    Réponses: 4
    Dernier message: 10/02/2006, 11h04

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