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 :

Ajout d'un ComboBox dans un UserControl


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut Ajout d'un ComboBox dans un UserControl
    Bonjour,

    j'essaye de me mettre à VB.Net et j'avoue que venant de VB6, je patauge assez joyeusement. J'avoue ne pas avoir fait beaucoup de recherche su ce forum auparavant car là où je suis en ce moment, j'ai une connexion internet très chaotique qui me permet rarement de rester en ligne plus de 5 ou 10 minutes.
    Voilà ce que j'essaye de faire : un usercontrol contenant entre autre une ComboBox.
    Je voudrais créer une propriété pour ce usercontrol me permettant de remplir la collection Items de cette ComboBox

    Jusqu'ici voilà ce que j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Private _MaListe As New List(Of String)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	Public Property MaListe As List(Of String)
            Get
                Return _MaListe
            End Get
            Set(ByVal value As List(Of String))
                _MaListe.AddRange(value)
            End Set
        End Property
    Mais quand je teste mon controle et que je viens sur la prorpriété "MaListe", si j'essaye d'ajouter un item j'ai aussitôt le message :

    Le constructeur sur le type "System.String" est introuvable
    Si quelqu'un peut me venir en aide, merci par avance.

  2. #2
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    ton probleme n'est trop clair.
    j'ai compris le besoin mais le probleme non .



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
     Private _MaListe As New List(Of String)
    	Public Property MaListe As List(Of String)
            Get
                Return _MaListe
            End Get
            Set(ByVal value As List(Of String))
                _Combobox.DataSource=value;
            End Set
        End Property

  3. #3
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    Merci déjà de t'y intéresser.
    J'ai donc un UserControl contenant entre autre une combobox (Plusieurs en fait mais si je résouds le problème pour un..). Je voudrais ajouter une propriété appelée "MaListe" à ce user controle qui me permettrait de remplir ce ComboBox.

    Avec ton code, j'ai toujours le même problème. Il manque le constructeur pour le type "System.string"

  4. #4
    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

    Dans la propriété il faut donner un valeur de type List(Of String)

    Voici un exemple plus complet avec la possibilité de d'avoir un id su l'élément choisi


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Private _MaListe As New List(Of Personne)
        Public Property MaListe As List(Of Personne)
            Get
                Return _MaListe
            End Get
            Set(ByVal value As List(Of Personne))
                _MaListe = value
                ComboBox1.DisplayMember = "Nom"
                ComboBox1.ValueMember = "Id"
                ComboBox1.DataSource = _MaListe
            End Set
        End Property
    Avec la classe personne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Class Personne
        Public Property Id As Integer
        Public Property Nom As String
        Sub New()
        End Sub
        Sub New(ByVal I As Integer, ByVal N As String)
            Id = I
            Nom = N
        End Sub
    End Class
    Appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Private l As New List(Of Personne)
        Private Sub ListBoxsToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBoxsToolStripMenuItem.Click
            Dim f As frmListBox = New frmListBox
            AjouteElement(1, "A")
            AjouteElement(2, "B")
            AjouteElement(3, "C")
            f.MaListe = l
            f.Show()
            '        CreInstance(Of frmListBox).Show()
        End Sub
        Public Sub AjouteElement(ByVal Id As Integer, ByVal Nom As String)
            l.Add(New Personne(Id, Nom))
        End Sub
    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.

  5. #5
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    @Rainui :
    Je voudrais pouvoir ajouter des éléments à ma combobox quand l'utilisateur de mon usercontrol est en mode design, plutôt que par code. C'est un élément que j'avais omis de mentionner.

    @rv26t :
    Ton code me fait avancer, mais je vais finir par avoir franchement honte, ça coince toujours.
    Pour essai je suis reparti d'un nouveau usercontrol qui ne contient que ce code (celui que tu m'avais proposé) :
    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
    Public Class UserControl1
        Private _MaListe As New List(Of Personne)
        Public Property MaListe As List(Of Personne)
            Get
                Return _MaListe
            End Get
            Set(ByVal value As List(Of Personne))
                _MaListe = value
                ComboBox1.DisplayMember = "Nom"
                ComboBox1.ValueMember = "Id"
                ComboBox1.DataSource = _MaListe
            End Set
        End Property
    End Class
     
    Public Class Personne
        Public Property Id As Integer
        Public Property Nom As String
        Sub New()
        End Sub
        Sub New(ByVal I As Integer, ByVal N As String)
            Id = I
            Nom = N
        End Sub
    End Class
    Si je passe ne mode "test" du usercontrol, ça semble fonctionner, je peux ajouter des éléments. Merci déjà pour ça.

    En revanche si je compile et que je tente d'utiliser le usercontrol, dès que j'essaye de le placer sur la feuille j'ai un message d'erreur à rallonge que je mets en pièce jointe.

    J'avoue ne pas avoir compris ton 3ème bout de code, c'est bien un exemple sur la manière d'utiliser le usercontrol dans une form ou je suis complètement à côté de la plaque ?
    Images attachées Images attachées  

  6. #6
    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 OhMonBato Voir le message
    J'avoue ne pas avoir compris ton 3ème bout de code, c'est bien un exemple sur la manière d'utiliser le usercontrol dans une form ou je suis complètement à côté de la plaque ?
    Non c'est sur un form. juste pour l'exemple d'utilisation, mais cela ne devrait pas changer fondemmentalement avec un user contrôle (sauf qu'il n'y as pas besoin de le créer dynamiquement)
    Ce qui donnerai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Private l As New List(Of Personne)
            AjouteElement(1, "A")
            AjouteElement(2, "B")
            AjouteElement(3, "C")
            MonuserControle.MaListe = l
    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.

  7. #7
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 337
    Par défaut
    Bonjour,

    Dans le code du UserControl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    Private _MaListe As List(Of String)
     
    Public Property MaListe() As List(Of String)
        Get
            Return _MaListe
        End Get
        Set(ByVal value As List(Of String))
            _MaListe = value
            Me.cboClient.DataSource = _MaListe
        End Set
    End Property
    Dans le code du formulaire sur l’événement que vous voulez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim lst As New List(Of String)
        With lst
            .Add("Yves")
            .Add("Frédéric")
        End With
        Me.MyUserControl1.MaListe = lst
    Mais comme cela, je ne vois pas l’intérêt d'ajouter des propriétés à votre UserControl alors que l'on peut accéder à tout les contrôles et leurs propriétés.
    Soit cboClient un ComboBox sur le UserControl, dans le code du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim lst As New List(Of String)
        With lst
            .Add("Yves")
            .Add("Frédéric")
        End With
        Me.MyUserControl1.cboClient.DataSource=lst

  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
    Citation Envoyé par OhMonBato
    Voilà ce que j'essaye de faire : un usercontrol contenant entre autre une ComboBox.
    Je voudrais créer une propriété pour ce usercontrol me permettant de remplir la collection Items de cette ComboBox.

    Je voudrais pouvoir ajouter des éléments à ma combobox quand l'utilisateur de mon usercontrol est en mode design, plutôt que par code.

    je suis donc reparti du code, j'ai juste ajouté" <Serializable()> " à la classe personne et ça fonctionne très bien pour moi, aussi bien en mode design qu'en mode exécution. J'ai fait l'essai d'ajouter des membres à la collection dans un projet test, sauvegardé celui ci. Tout est parfaitement sauvegardé.
    @OhMonBato : Voici un concept et exemple intéresssant qui pourrai figurer dans la FAQ.
    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.

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

Discussions similaires

  1. ajout dynamique de combobox dans une cellule
    Par kelvir dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/09/2011, 14h45
  2. Ajouter combobox dans datagridview + dataset
    Par Gdal dans le forum VB.NET
    Réponses: 1
    Dernier message: 29/05/2007, 23h09
  3. Ajouter un ComboBox dans un TDBGRind
    Par djabara dans le forum Bases de données
    Réponses: 1
    Dernier message: 15/11/2006, 16h11
  4. [VB.NET] ajouter combobox dans un datagrid
    Par HULK dans le forum Windows Forms
    Réponses: 6
    Dernier message: 27/10/2005, 14h30

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