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

C# Discussion :

Double ComboBox dans une Classe Personnalisée


Sujet :

C#

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Points : 9
    Points
    9
    Par défaut Double ComboBox dans une Classe Personnalisée
    Bonjour à tous,

    Dans le cadre de mon stage, je réalise une petite application en C# sur Visual Studio.

    Et bien sur, comme toujours, je rencontre une difficulté ^^...

    J'essaye de faire une Classe ComboBox personnalisée( une liste déroulante donc) qui comprends deux Controls ( La comboBox et un TextBox).


    Le problème est le suivant : Quand j'instancie ma classe, deux comboBox se créent l'une sur l'autre... L'un avec mes paramètres et l'autre vierge...

    D'ou vient cette mystérieuse deuxième comboBox?



    Voici mon 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
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows.Forms;
    using System.Xml;
     
    namespace Pepin
    {
        public class comboPerso :ComboBox
        {
            ComboBox combo_medicament;
            TextBox box_quantite;
            XmlNode noeudMedic;
            string[] tab_medicament;
            string[] tab_apport;
     
     
                public comboPerso()
                {
                    combo_medicament = new ComboBox();
                    combo_medicament.Width=100;
                    this.Controls.Add(combo_medicament);
     
     
                    box_quantite = new TextBox();
                    box_quantite.Location= new System.Drawing.Point (120,0);
                    this.Controls.Add(box_quantite);
     
                }
     
                public void remplissageMedic()
                {
                    combo_medicament.DropDownHeight = 400;
                    XmlTextReader xmlMedicreader = new XmlTextReader("..\\..\\medicament.xml");
                    XmlDocument xmlMedic = new XmlDocument();
                    xmlMedic.Load(xmlMedicreader);
     
     
                    noeudMedic = xmlMedic.DocumentElement;
                    tab_medicament = new string[noeudMedic.ChildNodes.Count];
                    tab_apport = new string[noeudMedic.ChildNodes.Count];
     
     
                    for (int u = 0; u <= noeudMedic.ChildNodes.Count - 1; u++)
                    {
                        XmlNode noeud = noeudMedic.ChildNodes[u];
                        tab_medicament[u]=noeud.ChildNodes[0].InnerText;
                        tab_apport[u]=noeud.ChildNodes[1].InnerText;
                        combo_medicament.Items.Add(tab_medicament[u]);
     
                    }
                }
     
                public void remplissageDrogue()
                {
                    combo_medicament.DropDownHeight = 400;
                    XmlTextReader xmlMedicreader = new XmlTextReader("..\\..\\drogue.xml");
                    XmlDocument xmlMedic = new XmlDocument();
                    xmlMedic.Load(xmlMedicreader);
     
     
                    noeudMedic = xmlMedic.DocumentElement;
                    tab_medicament = new string[noeudMedic.ChildNodes.Count];
                    tab_apport = new string[noeudMedic.ChildNodes.Count];
     
     
                    for (int u = 0; u <= noeudMedic.ChildNodes.Count - 1; u++)
                    {
                        XmlNode noeud = noeudMedic.ChildNodes[u];
                        tab_medicament[u] = noeud.ChildNodes[0].InnerText;
                        tab_apport[u] = noeud.ChildNodes[1].InnerText;
                        combo_medicament.Items.Add(tab_medicament[u]);
                    }
                }
     
                public void remplissageAntibiotique()
                {
                    combo_medicament.DropDownHeight = 400;
                    XmlTextReader xmlMedicreader = new XmlTextReader("..\\..\\antibiotique.xml");
                    XmlDocument xmlMedic = new XmlDocument();
                    xmlMedic.Load(xmlMedicreader);
     
     
                    noeudMedic = xmlMedic.DocumentElement;
                    tab_medicament = new string[noeudMedic.ChildNodes.Count];
                    tab_apport = new string[noeudMedic.ChildNodes.Count];
     
     
                    for (int u = 0; u <= noeudMedic.ChildNodes.Count - 1; u++)
                    {
                        XmlNode noeud = noeudMedic.ChildNodes[u];
                        tab_medicament[u] = noeud.ChildNodes[0].InnerText;
                        tab_apport[u] = noeud.ChildNodes[1].InnerText;
                        combo_medicament.Items.Add(tab_medicament[u]);
                    }
                }
     
        }
    }

  2. #2
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class comboPerso :ComboBox
        {
            ComboBox combo_medicament;
            TextBox box_quantite;
            XmlNode noeudMedic;
            string[] tab_medicament;
            string[] tab_apport;
            
            
                public comboPerso()
                {
                    combo_medicament = new ComboBox();
    Ben ouais, bien sûr !! Ta classe est une combo puis tu rajoute une combo dedans.... en gras dans le code !!

  3. #3
    Membre éclairé Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Points : 735
    Points
    735
    Par défaut
    c'est normal tu hérite de la classe ComboBox ( première combobox) et tu en instancies une autre ( la deuxième)

    prend UserControl comme classe de base

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Le problème est réglé... Ça fonctionne a merveille...

    Merci a vous deux =) Je ne savais pas de quelle classe héritée...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Une nouvelle question toujours a cause de cette classe...

    Maintenant que j'ai mit UserControls... Je n'arrive pas a créer plus d'un composant dans mon programme principal ( si je repasse en ComboBox , il peut en faire plusieurs...)

    Une raison particulière?

  6. #6
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    Redilemele, j'ai rien compris...

  7. #7
    Membre éclairé Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Points : 735
    Points
    735
    Par défaut
    si, tu peux instancier ton User control qui contient la comboBox et le TextBox autant de fois que tu veux dans ton programe principale,

    tu peux expliquer exactement ton probleme? mettre ton code aussi?

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    C'est parti pour du code :

    Donc voici mon programme principal où :

    -a chaque click de bouton et tant qu'il n'a pas été pressé huit fois , je crée un ComboBox Personnalisé:

    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
            private void btn_ajouter_medic_Click(object sender, EventArgs e)
            {
                if(flagMedic<8)
                {
                    comboPerso combo_medic1 = new comboPerso();
                    combo_medic1.Location = new Point(10,45+30*flagMedic); 
                    combo_medic1.remplissageMedic();
                    combo_medic1.Width=170;
                    panel_medicament_comp.Controls.Add(combo_medic1);
     
                    panel_medicament_comp.Height+=30;
                    flagMedic++;
                }
                else
                {
                    btn_ajouter_medic.Enabled=false;
                }
            }

    Voici ma classe personnalisée:
    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
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows.Forms;
    using System.Xml;
     
    namespace Pepin
    {
        public partial class comboPerso : UserControl
        {
     
            ComboBox combo_medicament;
            TextBox box_quantite;
            XmlNode noeudMedic;
            string[] tab_medicament;
            string[] tab_apport;
     
     
                public comboPerso()
                {
                    this.combo_medicament = new ComboBox();
                    this.combo_medicament.Width=130;
                    this.combo_medicament.DropDownHeight = 400;
                    this.Controls.Add(combo_medicament);
     
     
                    this.box_quantite = new TextBox();
                    this.box_quantite.Location= new System.Drawing.Point (140,0);
                    this.box_quantite.Width= 30;
                    this.Controls.Add(box_quantite);
     
                }
     
                public void remplissageMedic()
                {
     
                    XmlTextReader xmlMedicreader = new XmlTextReader("..\\..\\medicament.xml");
                    XmlDocument xmlMedic = new XmlDocument();
                    xmlMedic.Load(xmlMedicreader);
     
     
                    noeudMedic = xmlMedic.DocumentElement;
                    tab_medicament = new string[noeudMedic.ChildNodes.Count];
                    tab_apport = new string[noeudMedic.ChildNodes.Count];
     
     
                    for (int u = 0; u <= noeudMedic.ChildNodes.Count - 1; u++)
                    {
                        XmlNode noeud = noeudMedic.ChildNodes[u];
                        tab_medicament[u]=noeud.ChildNodes[0].InnerText;
                        tab_apport[u]=noeud.ChildNodes[1].InnerText;
                        combo_medicament.Items.Add(tab_medicament[u]);
     
                    }
                }
       }
    }
    Lorsque je lance l'application, le premier ComboBox se crée bien mais pour les suivants, rien n'apparait.

    Lorsque je met ComboBox plutôt que UserControl comme classe hérités tout revient a la normale ( sauf que bien sur c'est pas ce que je veux vu que ça met la pagaille dans l'interface)...


    Where is my problem ? =)

    Merci d'avance

  9. #9
    Membre éclairé Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Points : 735
    Points
    735
    Par défaut
    tu n'a pas défini la propriété Height de ton controle.

    si je comprend bien d'après ta formule tu voudrais que les ComboPerso aient une hauteur de 30,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    combo_medic1.Height = 30;
    combo_medic1.Width=170;
     panel_medicament_comp.Controls.Add(combo_medic1);

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Tu es un Dieu ^^ ...

    Merci

    Mais pourquoi cela fonctionné la première fois?

  11. #11
    Membre éclairé Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Points : 735
    Points
    735
    Par défaut
    surement la propriété Height était grande, donc le premier controle créé tu le vois, mais le suivant est créé aussi mais se trouve en dessous.

  12. #12
    Membre éclairé Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Points : 735
    Points
    735
    Par défaut
    tu peux gagner une ligne de code en remplaçant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    combo_medic1.Height = 30;
    combo_medic1.Width=170;
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    combo_medic1.Size = new System.Drawing.Size(170, 30);

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup pour ton aide =)

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

Discussions similaires

  1. problèmes sur un combobox dans une classe appelée
    Par francky74 dans le forum JDBC
    Réponses: 9
    Dernier message: 02/04/2014, 13h09
  2. Réponses: 1
    Dernier message: 24/01/2013, 08h45
  3. tableau de combobox et textbox dans une classe
    Par hamedi1 dans le forum C#
    Réponses: 1
    Dernier message: 08/02/2010, 17h22
  4. Mapper une collection dans une classe personnalisée
    Par Baptiste Wicht dans le forum JPA
    Réponses: 3
    Dernier message: 18/05/2008, 12h04
  5. Double propriété dans une classe
    Par Kiboumz dans le forum VB.NET
    Réponses: 3
    Dernier message: 28/03/2007, 13h49

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