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 :

initialiser une structure


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 219
    Par défaut initialiser une structure
    Bonjour,
    j'ai un petit soucis avec les structures.J'ai lu le cours mais il ne repond pas à ma question...

    Voici ma structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        Public Structure ParamNiv
            Dim niveau As Integer
            Dim designation As Integer
            Dim position As Integer
            Dim acces As String
            Dim TypeAcces As String
            Dim TypePaliereA As String
            Dim TypePaliereB As String
        End Structure
    niveau contient 32 éléments (de 0 à 31)
    et ainsi de suite

    Le problème c'est que je ne sais pas comment lui dire qu'il a 32 élément..
    et ensuite j'aimerais pouvoir afficher chaque élément de chaque variable de la structure dans un menu déroulant...
    (par ex: montrer tous les niveau dan le menu deroulant,dans un autre menu deroulant tous les accés...)

    Je ne sais pas si ce que je dis est comprhensible mais

    merci d'avance

  2. #2
    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
    Passer par un enum et pas par un entier

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 219
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public Enum ParamNiv
            Dim niveau As Integer
            Dim designation As Integer
            Dim position As Integer
            Dim acces As String
            Dim TypeAcces As String
            Dim TypePaliereA As String
            Dim TypePaliereB As String
    End Structure
    Comme ceci?

    Mais comment données les valeurs a chak élement de lénum?

  4. #4
    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
    Non, c'est niveau qui doit être une enum

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Enum Niveau
     
    Niveau0,
    Niveau1,
    Niveau2
     
    End Enum
    Enfin un truc dans le genre car j'suis pas fortiche en vb...

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 219
    Par défaut
    Sa va plutot faire lourd car juste pour niveau ya 32 element,et les otre a peu pré le mm nombre

  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
    Certes mais c'est ce qui répond à ton besoin

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 219
    Par défaut
    Plutot ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Public Enum ParamNiv
            Dim Enum niveau
               Niv1,
               Niv2,
               ...
            end Enum
            Dim Enum Acces
               Acc1,
               ...
            end Enum
    End structure

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,

    Et si tu utilisais un tableau de ta structure ?

    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
        Public Const KNBPARAM = 31
     
        Public Structure ParamNiv
            Dim niveau As Integer
            Dim designation As Integer
            Dim position As Integer
            Dim acces As String
            Dim TypeAcces As String
            Dim TypePaliereA As String
            Dim TypePaliereB As String
        End Structure
     
        Dim MesParam(0 To KNBPARAM) As ParamNiv
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            For i = 0 To KNBPARAM 'remplissage pour exemple
                MesParam(i).niveau = i
                MesParam(i).position = i + 1
                MesParam(i).acces = "acces N°" & i
            Next
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            For i = 0 To KNBPARAM
                ListBox1.Items.Add(MesParam(i).niveau)
                ListBox2.Items.Add(MesParam(i).position)
                ListBox3.Items.Add(MesParam(i).acces)
            Next
        End Sub
    Ce serait peut-être plus simple.

    Maintenant si les éléments sont de taille différentes il faut un tableau pour chaque élément.
    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
        Public Structure ParamNiv_V2
            Dim niveau() As Integer
            Dim designation() As Integer
            Dim position() As Integer
            Dim acces() As String
            Dim TypeAcces() As String
            Dim TypePaliereA() As String
            Dim TypePaliereB() As String
        End Structure
     
        Dim MesParamVar As ParamNiv_V2
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            ReDim MesParamVar.niveau(0 To 31)
            ReDim MesParamVar.designation(0 To 9)
            ' ...
        End Sub
    A+, Hervé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  9. #9
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 219
    Par défaut
    merci Hervé pour ton aide je pense que la deuxième solution me semble la plus appropriée.Seulement comment faire pour des string?

    Par exemple pour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            Dim TypeAcces As String
            Dim TypePaliereA As String

  10. #10
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Sur le même principe

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
        Public Const K_NB_NIVEAU = 31
        '...
        Public Const K_NB_ACCCES = 31
        Public Const K_NB_TYP_ACC = 4
        '...
     
        Public Structure Params
            Dim niveau() As Integer
            Dim designation() As Integer
            Dim position() As Integer
            Dim acces() As String
            Dim TypeAcces() As String
            Dim TypePaliereA() As String
            Dim TypePaliereB() As String
        End Structure
     
        Dim MesParamVar As Params
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
            ReDim MesParamVar.niveau(0 To K_NB_NIVEAU)
            '...
            ReDim MesParamVar.acces(0 To K_NB_ACCCES)
            ReDim MesParamVar.TypeAcces(0 To K_NB_TYP_ACC)
            '...
            For i As Integer = 0 To K_NB_ACCCES
                MesParamVar.acces(i) = "Acces N°" & i + 1
            Next
            MesParamVar.TypeAcces(0) = "Très élevé"
            MesParamVar.TypeAcces(1) = "Elevé"
            MesParamVar.TypeAcces(2) = "Moyen"
            MesParamVar.TypeAcces(3) = "Faible"
            MesParamVar.TypeAcces(4) = "Très faible"
     
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            For i As Integer = 0 To K_NB_ACCCES
                ListBox1.Items.Add(MesParamVar.acces(i))
            Next
            For i As Integer = 0 To K_NB_TYP_ACC
                ListBox2.Items.Add(MesParamVar.TypeAcces(i))
            Next
     
        End Sub
    Bonne continuation.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  11. #11
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 219
    Par défaut
    Voila ce que j'ai fait.J'ai un dictionnaire avec ma structure dedan (déclaration et inialisation):
    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
     
        Public Structure ParamNiv
            Dim niveau() As Integer
            Dim designation() As Integer
            Dim position() As Integer
            Dim acces() As String
            Dim TypeAcces() As String
            Dim TypePaliereA() As String
            Dim TypePaliereB() As String
        End Structure
     
        Dim mesParamNiv as ParamNiv
     
        'procédure qui initialise les élément de la structure
        Sub InitParamNiv()
            ReDim mesParamNiv(0 to 31)
        End Sub
    Seulement il me dit que "l'instruction redim requiert un tableau"

    et lorsque je fais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        Dim mesParamNiv() as ParamNiv
    il me dit que "niveau n'est pas un membre de systeme.array

  12. #12
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Citation Envoyé par scarfunk Voir le message
    Voila ce que j'ai fait.J'ai un dictionnaire avec ma structure dedan (déclaration et inialisation):
    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
        Public Structure ParamNiv
            Dim niveau() As Integer
            Dim designation() As Integer
            Dim position() As Integer
            Dim acces() As String
            Dim TypeAcces() As String
            Dim TypePaliereA() As String
            Dim TypePaliereB() As String
        End Structure
       
        Dim mesParamNiv() as ParamNiv
    
        'procédure qui initialise les élément de la structure
        Sub InitParamNiv()
            ReDim mesParamNiv(0 to 31)
        End Sub
    Seulement il me dit que "l'instruction redim requiert un tableau"

    ...
    Normal il faut les ().

    Mais là tu mélanges tout
    Que souhaites-tu faire?
    Un tableau (32 fois) de ta structure ou une structure contenant des tableaux de différentes dimension (32 niveaux, 10 désignation, 15 position, ...) ?
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  13. #13
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 219
    Par défaut
    Une structure contenant des tableaux de différentes dimensions

  14. #14
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Tu as la solution dans le post N°11
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  15. #15
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 219
    Par défaut
    Oui et je t'en remercie seulement un dernier problème subsiste.

    Donc dans mon dictionnaire je déclare ma structure puis l'initialise dans un procédure Sub InitParamNiv () (toi dans le form load)

    Dans le code de ma form j'utilise un bouton ajouter pour rajouter les données dans les listes box seulement lorsque je clique sur ajouter j'ai une erreur.

    Seul les données pour les niveau s'ajoute.
    Pour le reste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sub InitParamNiv()
       mesParamsNiv.acces(0) = "A"
       mesParamsNiv.acces(1) = "B"
       '...
    end sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub AjouterDonnesListBox_Click(...)
       For i = 0 to K_ACCES
          ListBox2.Items.Add(mesParamNiv.acces(i))
       next
    end sub
    Cela me donne une erreur
    La valeur ne peut pas être null.
    Nom du paramètre : item
    Voici la ligne qui bloc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          ListBox2.Items.Add(mesParamNiv.acces(i))
    ET c'est pareil pour TypeAcces,TypePaliereA et TypePaliereB

  16. #16
    Rédacteur
    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Billets dans le blog
    121
    Par défaut


    un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ReDim mesParamNiv.niveau(0 to 31)
    ainsi de suite... enfin je crois

    @++
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/01/2014, 09h49
  2. initialiser une structure numpy.ndarray
    Par awalter1 dans le forum Calcul scientifique
    Réponses: 2
    Dernier message: 10/10/2011, 08h52
  3. Initialiser une structure contenant un tableau
    Par Muetdhiver dans le forum C
    Réponses: 4
    Dernier message: 13/10/2010, 18h46
  4. initialiser une structure
    Par hdgetnet dans le forum Débuter
    Réponses: 1
    Dernier message: 21/06/2010, 14h55
  5. initialiser une structure
    Par marbouchi dans le forum Débuter
    Réponses: 10
    Dernier message: 10/12/2008, 18h51

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