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

Windows Forms Discussion :

Attribut TAG de la ListBox


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 14
    Points : 12
    Points
    12
    Par défaut Attribut TAG de la ListBox
    Bonsoir à tous,

    Je fais actuellement mes premières classes avec VB, J'avoue avoir un peu de mal par rapport à PHP. Enfin, j'ai un problème je cherche à recuperer l'attribut Tag que j'ai au préalable renseigné lorsque j'ai généré ma ListBox. Le Tag contient l'index des enregistrements.
    Mais je n'y arrive pas. Quand elle n'est pas triée l'attribut correspond bien à la position dans la liste. Mais une fois trié les résultats sont délirants.

    Voila le code pour l'enregistrement
    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
    Private Sub ListConsul()
            Dim X As New docXML("data.xml")
            Dim XmlDoc As XmlDocument = New XmlDocument()
            Dim count As Integer
            Dim i As Integer
            Dim t As String
            Dim pos As Integer
     
            ListBox1.Items.Clear()
     
            count = X.countElements("/data/fiche")
            ReDim ListBox1.Tag(count)
            For i = 1 To count
                t = X.getElementValue("/data/fiche/etatcivil/nom", i) + " " + X.getElementValue("/data/fiche/etatcivil/prenom", i)
                pos = ListBox1.Items.Add(t)
                ListBox1.Tag(pos) = i
            Next i
     
            debugBox.Text = "Count :" & count
        End Sub
    Et pour la lecture je me contente de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub ListBox1_SelectedIndex(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
            Dim X As New docXML("data.xml")
            Dim XmlDoc As XmlDocument = New XmlDocument()
            Dim i As Integer
            Dim a As Integer
     
            i = ListBox1.SelectedIndex
            i = i + 1
            a = ListBox1.Tag(ListBox1.SelectedIndex)
    ....
    Le reste du code génère l'affichage de champ dans le formulaire donc pas utile pour le problème

    Est ce l'appel de ma fonction Tag qui n'est pas fait correctement?
    Y'a t'il un autre moyen plus fiable pour récupérer l'index dans la liste.
    En fait comme on peut le voir la ListBox est constitué d'info tiré d'un XML.
    Le XML n'est pas trié de façons alphabétique. Et je souhaite que l'utilisateur obtienne une liste trié.

    J'ai pas trouvé mon bonheur sur MSDN
    Je post en désespoir de cause parce que du coup je butte là dessus et j'avance pas car c'est un problème majeur vu que je vais me resservir de la solution plus loin dans mon programme.

    Merci d'avance pour toutes pistes pour résoudre ce problème.

  2. #2
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    C'est normal que l'index dans le ListBox soit modifié lorsque tu le tries, ça n'est qu'un index destiné à l'ordre d'affichage.

    Tu ne devrais pas non plus utiliser le .Tag qui est le fourre-tout par excellence mais plutôt charger la listbox non pas avec des string (le nom / prénom), mais plutôt utiliser un objet "Personne" par exemple pour lequel tu pourrais définir une propriété ID.

    Cela t'évitera en plus de devoir recharger des données lors du clic sur la listbox.

    Un exemple :
    Classe personne
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    Public Class Personne
        Implements IComparable(Of Personne)
     
        Public Function CompareTo(ByVal P As Personne) As Integer Implements IComparable(Of Personne).CompareTo
            Return Me.ToString.CompareTo(P.ToString)
        End Function
     
        Private strNom As String
        Private strPrenom As String
        Private intID As Integer
        Public Sub New(ByVal iNom As String, ByVal iPrenom As String, ByVal iID As Integer)
            strNom = iNom
            strPrenom = iPrenom
            intID = iID
        End Sub
        Public Property Nom() As String
            Get
                Return strNom
            End Get
            Set(ByVal value As String)
                strNom = value
            End Set
        End Property
        Public Property Prenom() As String
            Get
                Return strPrenom
            End Get
            Set(ByVal value As String)
                strPrenom = value
            End Set
        End Property
        Public Property ID() As Integer
            Get
                Return intID
            End Get
            Set(ByVal value As Integer)
                intID = value
            End Set
        End Property
        Public Overrides Function ToString() As String
            Return strNom & " " & strPrenom
        End Function
     
        Public Shared Function LoadFromXMLFile() As List(Of Personne)
     
            Dim sl As New List(Of Personne)
            '
            ' ICI tu charges ton XML
            '
            sl.Add(New Personne("DNom1", "Prenom1", 1))
            sl.Add(New Personne("CNom2", "Prenom2", 2))
            sl.Add(New Personne("ANom3", "Prenom3", 3))
            sl.Add(New Personne("BNom4", "Prenom4", 4))
     
            Return sl
     
        End Function
     
    End Class
    Et dans la form :
    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
     
       Public Sub New()
     
            ' Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
            Dim slPersonne As List(Of Personne) = Personne.LoadFromXMLFile
            slPersonne.Sort()
            Me.ListBox3.DataSource = slPersonne
     
        End Sub
        Private Sub ListBox3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox3.Click
            Dim P As Personne
            P = CType(Me.ListBox3.SelectedItem, Personne)
            MsgBox(P.ID & " - " & P.Nom)
        End Sub
    A noter, l'interface IComparable est indispensable pour pouvoir utiliser le .sort sur la list(of personne).

    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Merci beaucoup olsimare pour ta solution, pour le moment elle me parait écrite dans une langue inconnue, je vais la décortiqué mais je comprends un peu ton code.
    Il est vrai que l'attribut TAG était la solution de facilité.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Ça marche du feu comme ça, j'arrive à comprendre le fonctionnement de ton code
    Maintenant je vais me plonger dans son détail.
    Merci encore

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

Discussions similaires

  1. [Regexp] splitter attribut tag xml
    Par kij dans le forum Format d'échange (XML, JSON...)
    Réponses: 10
    Dernier message: 28/02/2008, 16h35
  2. [STRUTS] les tags html: et l'attribut "id"
    Par treivse dans le forum Struts 1
    Réponses: 2
    Dernier message: 01/08/2006, 08h20
  3. [XSL~FO][FOP] variables possibles dans les attributs de tags ?
    Par lebechen dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 29/06/2006, 09h17
  4. [Custom Tags 1.2] Passer une variable comme valeur d'attribut d'un tag jsp
    Par Pi2 dans le forum Taglibs
    Réponses: 7
    Dernier message: 16/09/2005, 14h44
  5. TAGS -> attributs sans guillemets
    Par Bastet79 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 14/08/2003, 13h01

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