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 :

Utilisation DataSource sur ListBox


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2019
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2019
    Messages : 57
    Par défaut Utilisation DataSource sur ListBox
    Bonjour à tous,

    j'ai un petit soucis avec ce code :

    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
    Public Class Form1
     
        Dim Mois() As String
        Dim Couleur() As String
     
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     
            Mois = {"Janvier", "Février", "Mars"}
            Couleur = {"Bleu", "Blanc", "Rouge"}
     
        End Sub
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
     
            Me.ListBox1.DataSource = Nothing
            Me.ListBox1.DataSource = Mois
     
        End Sub
     
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
     
            Me.ListBox1.DataSource = Nothing
            Me.ListBox1.DataSource = Couleur
     
        End Sub
     
    End Class
    Si je click sur le bouton1, j'affiche la liste "Mois" dans la ListBox.
    Je sélectionne le mois "Mars", et je clique sur le bouton2 qui m'affiche bien la liste "Couleur".
    Je sélectionne la couleur "Blanc".
    Je re-click sur le bouton1, il m'affiche la liste "Mois", mais il me re-sélectionne la couleur "Blanc" !
    Comment est-ce possible ?
    J'ai ajouté "Me.ListBox1.DataSource = Nothing" mais ça n'a rien changé.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2019
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2019
    Messages : 57
    Par défaut
    A chaque fois qu'on assigne une List au ".DataSource", la propriété ".BindingContext" ajoute un élément à sa liste.
    Cet élément contient un champs "dataSourceHashCode" qui correspond au HashCode de la List qu'on obtient avec
    la fonction ".GetHashCode".
    Je pense qu'à chaque assignement de la propriété ".DataSource", il utilise le HashCode de la List s'il le
    trouve dans la liste ".BindingContext()".
    On peut y voir un champs ".Position" qui indique je pense l'Index sélectionné.
    J'ai filtré la List "Mois", mais évidement comme il crée une autre List elle apparait en "Inconnu" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.ListBox1.DataSource = Mois.Where(Function(i) i.StartsWith("F")).ToList
    J'ai écrit ceci pour le visualiser :

    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
    Dim propertiesInfo As PropertyInfo()
            Dim prop As PropertyInfo
            Dim valProp As Object
            Dim valDataSourceHashCode As FieldInfo
            Dim BD As Object
     
            Dim HashCodeMois As Integer
            Dim HashCodeCouleur As Integer
     
            Dim NomListe As String
            Dim Position As Integer
            Dim Hcode As Integer
     
            HashCodeMois = Mois.GetHashCode
            HashCodeCouleur = Couleur.GetHashCode
     
            For Each BD In Me.ListBox1.BindingContext
                propertiesInfo = BD.GetType().GetProperties()
                For Each prop In propertiesInfo
                    valProp = prop.GetValue(BD, Nothing)
                    If prop.Name = "Key" Then
                        valDataSourceHashCode = valProp.GetType().GetField("dataSourceHashCode", BindingFlags.NonPublic Or BindingFlags.Instance)
                        Hcode = valDataSourceHashCode.GetValue(valProp)
                        If Hcode = HashCodeMois Then
                            NomListe = "Mois"
                        ElseIf Hcode = HashCodeCouleur Then
                            NomListe = "Couleur"
                        Else
                            NomListe = "Inconnu"
                        End If
                        Console.WriteLine("Liste : " & NomListe)
                    ElseIf prop.Name = "Value" Then
                        Position = BD.value.target.position
                        Console.WriteLine("Position : " & Position)
                    End If
                Next prop
            Next BD
     
            Console.WriteLine()

  3. #3
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    3 182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 182
    Par défaut
    As-tu essayé avec juste Me.ListBox1.DataSource = Mois.ToList() ?
    ToList() créé une nouvelle liste, elle ne devrait donc pas avoir le même HashCode.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 769
    Par défaut
    Citation Envoyé par pqboot Voir le message
    Je re-click sur le bouton1, il m'affiche la liste "Mois", mais il me re-sélectionne la couleur "Blanc" !
    Je pense que tu voulais le mois "Mars" (et quand tu recliques sur le bouton 2, ça sélectionne "Blanc")

    Si tu ne veux plus qu'il y ait de sélection, le plus simple serait d'utiliser Listbox1.ClearSelected (ou Listbox1.SelectedItem=-1)

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/03/2012, 00h47
  2. Principe du DataSource sur un listbox
    Par Papy214 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 30/05/2008, 16h33
  3. question sur l'utilisation d'une listBox
    Par Mickey.jet dans le forum Delphi
    Réponses: 3
    Dernier message: 02/06/2006, 17h57
  4. [Sybase] Utilisation indexes sur table Proxy
    Par MashiMaro dans le forum Sybase
    Réponses: 2
    Dernier message: 20/02/2004, 10h20
  5. [Utilisation Postgresql sur windows]
    Par xhercule dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 26/01/2004, 18h36

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