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 :

[VB.NET] Associer une clé aux éléments d'une combo


Sujet :

Windows Forms

  1. #1
    Membre actif Avatar de Cereal123
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juin 2004
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juin 2004
    Messages : 414
    Points : 214
    Points
    214
    Par défaut [VB.NET] Associer une clé aux éléments d'une combo
    Bonjour,

    Je voudrais associer à chaque élément de ma combo une clé, afin que lorsque l'utlisateur sélectionne un élement, je ne récupère pas l'index ou le libellé de l'élément, mais sa clé.
    En cherchant sur les forums, j'ai vu que la fonction SetItemData(ListBox1, Indice, Clé) existait dans VB6 mais ce n'est pas très propre de l'appeler en .net.
    Comment faire en VB.net ?

  2. #2
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 58
    Points : 70
    Points
    70
    Par défaut
    En DotNet une ComboBox a pour Item des Objets quelconques et pas seulement des paires Key, Value.

    1) Tu fais Une Classe ItemSource avec des propriétés qui vont servir de cle et de valeur pour ta ComboBox

    2) Tu fais Une Collection héritant de CollectionBase qui renvoie des Objets ItemSource.

    3) Tu Binde ta ComboBox avec ta Collection en spécifiant quelles propriétés servent de cle et d'affichage !

    Si tu veux je peux te poster un exemple de Code en VB...

  3. #3
    Membre actif Avatar de Cereal123
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juin 2004
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juin 2004
    Messages : 414
    Points : 214
    Points
    214
    Par défaut
    Je pense avoir compris.
    Si tu as un exemple, il serait le bienvenu.
    Merci.

  4. #4
    Membre chevronné
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Points : 1 904
    Points
    1 904
    Par défaut
    Salut

    A mon avis la solution la plus clean c'est
    - tu cree une classe avec les props que tu souhaite (text, key...)
    - tu ajoute une instance de classe pour chaque element dans une collection (arraylist par ex)
    - tu fais un binding sur cette collection

    il devient simple de recuperer l'objet et ses proprietes (avec un petit cast)

    Si t'as rien compris a ce que je viens de dire (normal c'est le matin et je suis pas encore bien reveille) voila un petit ex en live avec des guitares
    http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q313640
    Rock'n'Roll

  5. #5
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 58
    Points : 70
    Points
    70
    Par défaut
    Bon vla un exemple:
    1) Une classe d'Items avec un Index integer et une Key string
    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
      Public Class BaseClass
        Private _Index As Integer
        Private _Key As String
        Private _Texte As String
     
        Public Overridable Property Index() As Integer
          Get
            Return me._Index
          End Get
          Set(ByVal value As Integer)
            Me._Index = value
          End Set
        End Property
     
        Public Property Key() As String
          Get
            Return Me._Key
          End Get
          Set(ByVal Value As String)
            Me._Key = Value
          End Set
        End Property
     
        Public Property Texte() As String
          Get
            Return Me._Texte
          End Get
          Set(ByVal value As String)
            Me._Texte = value
          End Set
        End Property
     
        Public Sub New()
     
        End Sub
     
        Public Sub New(ByVal index As Integer, ByVal key As String, ByRef texte As String)
          Me._Index = index
          Me._Key = key
          Me._Texte = texte
        End Sub
      End Class
    2) Une Collection (comme dit Piotrek on peut prendre une ArrayList ou un Array ou tout ce qui implémente IList) Renvoyant des Objets BaseClass
    La aussi on peut caster aprés, mais je préfère avoir des collections fortement typées.

    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
    Public Class ItemsCollection
        Inherits BaseCollection
     
        Default Public Overridable Property Item(ByVal index As Integer) As BaseClass
          Get
            Return CType(innerlist.Item(index), BaseClass)
          End Get
          Set(ByVal Value As BaseClass)
            Me.InnerList.Item(index) = Value
          End Set
        End Property
     
        'Pour récupérer les éléments par la clé string
        Default Public ReadOnly Property Item(ByVal key As String) As BaseClass
          Get
            Dim Item As BaseClass
            For Each Item In Me.InnerList
              If Item.Key = key Then Return Item
            Next
            Return Nothing
          End Get
        End Property
     
        Public Sub Add(ByVal value As BaseClass)
          Me.InnerList.Add(value)
        End Sub
     
        Public Sub Create(ByVal index As Integer, ByVal keyTexte As String)
          Dim FFEItem As New BaseClass(index, keyTexte, keyTexte)
          Me.Add(FFEItem)
        End Sub
     
        Public Sub Create(ByVal index As Integer, ByVal key As String, ByVal texte As String)
          Dim Item As New BaseClass(index, key, texte)
          Me.Add(Item)
        End Sub
     
      End Class
    3) On Binde la ComboBox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      Dim SexesCollection as new ItemsCollection
      SexesCollection.Create(0,"M","Masculin")
      Sexes.Collection.Create(1,"F","Féminin")
      Combo.DisplayMember = "Texte"
      Combo.ValueMember = "Index"
      Combo.DataSource = SexesCollection
    C'est vrai que ca fait beaucoup de Lignes...
    (Maniak va me soutenir que non !)
    Mais ensuite je peux utiliser ma Collection de Sexes partout (WebForms et WinForms) et créer facilement des Objets qui héritent de ma BaseClass comme sources de ComboBox.

  6. #6
    Membre actif Avatar de Cereal123
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juin 2004
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juin 2004
    Messages : 414
    Points : 214
    Points
    214
    Par défaut
    Merci : je vais tester tout ça de ce pas...
    Bon week-end.

  7. #7
    Membre régulier Avatar de Nimothenicefish
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 190
    Points : 103
    Points
    103
    Par défaut
    Bonjour,

    J'ai remarqué une erreur dans ton code. Ce n'est pas BaseCollection mais CollectionBase dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public Class ItemsCollection
        Inherits BaseCollection
    Sinon j'ai un p'tit soucis dans l'utilisation des DisplayMember, ValueMember et DataSource. Visual studio me dit que qu'ils ne sont pas membre de System.Windows.Forms.TextBox
    Quelqu'un serait pourquoi et surtout comment contourner le problème ?

    Merci de votre compréhension

    Cordialement, Nimo

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

Discussions similaires

  1. Accès aux éléments d'une structure
    Par licorne dans le forum Pascal
    Réponses: 1
    Dernier message: 15/02/2007, 17h44
  2. accès aux éléments d'une enum
    Par aymeric__ dans le forum C++
    Réponses: 6
    Dernier message: 17/08/2006, 21h17
  3. [vb.net 2.0]Acceder aux variable d'une classe
    Par kissskoool dans le forum Windows Forms
    Réponses: 8
    Dernier message: 21/06/2006, 19h54
  4. Réponses: 7
    Dernier message: 30/03/2006, 10h04
  5. [VB.net] Acces aux controles d'une form a partir d'une autre
    Par Fab62_ dans le forum Windows Forms
    Réponses: 3
    Dernier message: 25/01/2006, 12h47

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