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 :

Listbox - sélectionnez la première valeur par défaut


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 15
    Points : 17
    Points
    17
    Par défaut Listbox - sélectionnez la première valeur par défaut
    Bonjour
    Je crée un controle Listbox dans un Panel par code. Tout se passe bien excepté que je n'arrive pas à sélectionner à la création la première donnée de la Liste.
    Je pensais que c'était en mettant
    .SelectedIndex = 0 ,
    ou alors
    .SelectedIndex = .Items(0).
    mais j'obtiens toujours le message comme quoi le 0 n'est pas un index valide
    Je débute en VB.Net et j'espère que qn pourra m'aider.

    Merci

    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
    Dim Param_List As New ListBox
                    If ControlWidth = 9999 Then XWidth = 200 Else XWidth = ControlWidth
                    With Param_List
                        .Name = ControlName
                        .Size = New Size(288, XWidth)
                        .Location = New Size(0, param_axe)
                        .DataSource = New BindingSource(_DataSourceRPT_Declaration._Listdata, Nothing)
                        .DisplayMember = "TXT"
                        .ValueMember = "ID"
                        'marche pas .SelectedIndex = .Items(0)
                        param_axe = param_axe + XWidth + 10
                    End With
     
                    AddHandler Param_List.SelectedIndexChanged, AddressOf SomethingChanged
                    Panel_Param.Controls.Add(Param_List)

  2. #2
    Membre averti Avatar de Delaney
    Homme Profil pro
    Developpeur VB amateur
    Inscrit en
    Mars 2014
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Developpeur VB amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 148
    Points : 372
    Points
    372
    Par défaut
    Bonjour,

    Cela veut dire que tu ne récupères pas bien les données de ta source ".DataSource = New BindingSource(_DataSourceRPT_Declaration._Listdata, Nothing)" et donc que tu n'ajoutes aucun élément à ta listbox donc l'index est nothing.
    Vois tu apparaitre tes données si tu ne fais pas la sélection ?


    Sincèrement

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    Bonjour Elthorn
    Ma liste contient bien toutes les données espérées, l'utilisateur sélectionne un élément qui déclenche la création d'un rapport envoyant la sélection comme paramètre. Ceci fonctionne quand l'utilisateur clique, par contre à la création de la listbox, j'aurai aimé que le premier élément soit sélectionné par défaut pour que le paramètre ne soit pas vide au démarrage. D'où mon idée de mettre la sélection au premier élément.

  4. #4
    Membre émérite 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
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonsoir,

    Peut-être que ceci t'aidera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    '... ...
                   With Param_List
                        .Name = ControlName
                        .Size = New Size(288, XWidth)
                        .Location = New Size(0, param_axe)
     
    '... ...
                        .SelectedIndex = 0
     
    '... ...

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    Bonjour Phil
    Merci mais j'ai déjà essayé cela, j'obtiens le message d'erreur comme quoi la valeur de l'index ne peut pas être 0

  6. #6
    Membre émérite 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
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    Bien sûr que oui, les index peuvent être 0, les Items sont indicés de 0 à .Count-1.
    Par contre, l'indice ne peut être inférieur à 0, ceci se produit lorsqu'on tente l'opération et que la Liste est vide.

    Sans doute dois-tu attendre que la List soit remplie avant d'exécuter l'instruction .SelectedIndex = 0, et peut-être même dois-tu tester If List.Items.Count > 0 Then ....

    Bonne journée,

  7. #7
    Membre averti Avatar de Delaney
    Homme Profil pro
    Developpeur VB amateur
    Inscrit en
    Mars 2014
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Developpeur VB amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 148
    Points : 372
    Points
    372
    Par défaut
    Bonjour tscrosh

    Essaie de placer ta sélection à un autre endroit, après avoir fait apparaitre ta listbox par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Panel_Param.Controls.Add(Param_List)
    Param_List.SelectedIndex = 0
    Et pour debugger tu peux placer quelques msgbox à différents endroits pour vérifier si ta listbox contient quelque chose avec
    Msgbox (Param_List.items.count.tostring).
    Sincèrement

  8. #8
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    Le souci c'est que ma ListBox est placée par programmation elle aura un autre nom en fonction d'une sélection antérieure.
    Param_List n'existe que pendant la création de cette ListBox . LaListBox aura le nom communiqué via la variable : ControlName
    En WINDEV on peut utiliser des indirections que je ne retrouve pas en VB.NET style {ControlName}.SelectedIndex = 0
    J'ai essayé de repasser à travers les controles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dim ctrl As Control
            For Each ctrl In Panel_Param.Controls
                If (ctrl.GetType() Is GetType(ListBox)) Then
                    Dim LBp As ListBox = CType(ctrl, ListBox)
                    LBp.SelectedIndex = 0
     
                End If
            Next
    Mais là aussi la liste item LBp est vide alors que sous ctrl je peux voir mes éléments.

    Je précise que mon problème se pose à la création de la Listbox, après son utilisation On_click fonctionne correctement.
    Là je me pose la question que fait le programme quand on ouvre le contrôle côté WATCH ... cela doit bien provoquer qch.

    J'ai essayé de faire des ctrl.refresh et LBp.refresh ... mais rien ...


    Là je viens de voir qch d'étrange, en prenant le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim ctrl As Control
            For Each ctrl In Panel_Param.Controls
                If (ctrl.GetType() Is GetType(ListBox)) Then
                    Dim LBp As ListBox = CType(ctrl, ListBox)
                End If
            Next
    Je parcours bien mon Panel_Param et je tombe bien sur ma Listbox
    Du côté WATCH je vois si je mets un BREAK au niveau du END IF:
    Nom : XX1.PNG
Affichages : 207
Taille : 3,8 Ko
    Nom : XX2.PNG
Affichages : 217
Taille : 4,7 Ko

    et donc là ma listebox n'a pas de valeur sélectionnée.

    Je refais la même manip sauf que dans WATCH j'ouvre ctrl et je fais F11
    Nom : XX3.PNG
Affichages : 243
Taille : 22,3 Ko

    Hop tout se rempli
    Nom : XX4.PNG
Affichages : 220
Taille : 7,0 Ko

    Que ce passe -t-il comme événement lorsqu'on "ouvre" un contrôle dans la WATCH ... ?

  9. #9
    Membre émérite 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
    Points : 2 865
    Points
    2 865
    Par défaut
    Là, je ne peux plus guère prospecter ...

    Je me dis que tu devrais trouver un événement qui s'active lors de l'ajout d'un Item dans la ListBox. Dans un telle procédure événementielle, le code Sender.SelectedIndex = 0 ferait merveille ! Mais je ne vois pas quel événement utiliser pour cela.

    Par contre, quel que soit le nom du ListBox, il y a bien un endroit dans le code où "on sait" qu'une ligne est ajoutée. De plus, après l'ajout d'un Item, on est sûr que le ListBox n'est pas vide. Le SelectedIndex devrait pouvoir programmé à cet endroit.

    Par ailleurs, mais, tu le sais certainement, on utilise les références en VB (à défaut de pointeur).
    Ainsi, par exemple, j'écris ici une procédure qui exécute .SelectedIndex = 0 pour n'importe quelle ListBox qu'on veut bien lui passer, quel que soit le nom de ce ListBox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub SelectIndexZero(ByRef LB As ListBox)
    If LB.Items.Count > 0 Then 
       LB..SelectedIndex = 0
    End If
    End Sub
    Et n'importe où dans ton code tu peux faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ' ... ... ...
    Dim UneListe As ListBox
    UneList.Name = "Blabla"
    ' ... ... ...
    SelectIndexZero(UneListe)   ' Place la sélection sur 0 dans la ListBox UneListe
    ' ... ... ...
    SelectIndexZero(UneAutreListe)   ' Place la sélection sur 0 dans la ListBox UneAutreListe
     
    SelectIndexZero(ListBox1)   ' et aussi dans ListBox1
     
    ' ... ... ...
    Finalement, je crois que cette procédure devrait t'aider, mais je pense aussi qu'il convient de l'appeler là où s'ajoutent les Items.


Discussions similaires

  1. ListBox Valeur par défaut
    Par pythagore3_14 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/05/2020, 18h00
  2. défnir valeur par défaut listbox
    Par WillyPayne dans le forum Struts 1
    Réponses: 16
    Dernier message: 17/08/2010, 15h36
  3. Listbox et selection valeur par défaut
    Par cazadeis dans le forum Windows Forms
    Réponses: 5
    Dernier message: 16/06/2009, 18h13
  4. [2.3.0] Valeur par défaut d'une ListBox
    Par scariou29 dans le forum BIRT
    Réponses: 8
    Dernier message: 24/12/2008, 15h54
  5. Unique + valeur par défaut
    Par ketalie dans le forum Outils
    Réponses: 4
    Dernier message: 02/07/2003, 15h29

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