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 :

recherche d'une combobox avec checkbox


Sujet :

C#

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Par défaut recherche d'une combobox avec checkbox
    bonjour à tous.
    voilà je recherche des composants gratuits en .net
    ce soir, j'ai besoin d'une combobox munie de checkbox. j'en ai trouvé plusieurs sur codeprojets.com, mais là plupart d'entre eux étaient de vraies usines à gaz ! >_<
    ce que j'aimerais avoir, c'est une liste a laquelle on ajouterait un élément en l'instanciant, celui-ci ayant donc un ID, un nom et une variable booléen pour dire si elle est cochée ou non. mais meme après plusieurs heures sur google, je n'arrive pas à trouver.
    j'ai essayé de simplifier les bouts de codes trouvés sur la toile, mais il n'y a rien à faire. les gens qui ont créés ces composants ont vu un peu trop grands, et ceux ci sont bien trop compliqués, avec tout un tas de fonctions inutiles ...

    pourriez-vous m'aider svp ?

  2. #2
    Membre émérite 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
    Par défaut
    tu crées une classe qui hérite de CheckBox ou tu met l'ID, Name (tu le met dans la propriété Text) et le valeur bool selection ( que tu mets dans la propriété Checked), ensuite tu instancies cette classe et tu l'ajoute aux Items de ta Combo.

    ensuite tu crées une classe qui hérite de ComboBox et tu override la méthode OnDrawItem, et c'est la que tu dessines ta CheckBox.

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Par défaut
    merci pour la réponse.
    cependant je n'ai jamais fais d'héritage O_o
    peux tu me montrer comment je peux faire pour que ma classe hérite de combobox stp ?

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Par défaut
    je pense avoir réussi une partie :

    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace ComboboxMultiselect
    {
        public class ComboboxMultiselect : CheckBox
        {
            private Guid id = Guid.Empty;
            private string text = string.Empty;
            private bool checkState = false;
     
            public ComboboxMultiselect(Guid id, string text, bool checkState)
            {
                this.id = id;
                this.text = text;
                this.checkState = checkState;
            }
     
            public Guid Value
            {
                get { return id; }
                set { id = value; }
            }
     
            public string Text
            {
                get { return text; }
                set { text = value; }
            }
     
            public bool CheckState
            {
                get { return checkState; }
                set { checkState = value; }
            }
        }
    }
    comment écrire la suite ? le but c'est d'avoir une seule dll à la fin, pour réutiliser mon nouveau composant dans tous futurs projet !
    j'aimerais aussi qu'il y ait une scrollbar dans ma combobox, et si possible définir la hauteur moi meme et tout ...

    et je dois jouer avec les évènement, lorsque je coche une case par exemple ...

    merci

  5. #5
    Membre émérite 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
    Par défaut
    Bon tu veux qu'on développe à ta place ^^, allé un petit exercice pour se rafraichir la mémoire,

    tu peux t'en passer des deux propriétés, Text et checkState, tu hérites d'un CheckBox, utilise les propriétés, Text et Checked.

    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
     
    public class MaCheckBox : CheckBox
        {
            public MaCheckBox(Guid Id, string text, bool checkState)
            {
                Checked = checkState;
                Text = text;
                ID = Id;
            }
     
            public Guid ID
            {
                get;
                set;
            }
      }

    maintenant notre Combo:

    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
     
    public class MaComboBox : ComboBox
        {
            public MaComboBox()
            {
                DrawMode = DrawMode.OwnerDrawFixed;
            }
     
            protected override void OnDrawItem(DrawItemEventArgs e)
            {
                if (e.Index == -1) return;
                MaCheckBox box = (MaCheckBox)Items[e.Index];
                CheckBoxRenderer.DrawCheckBox(
                    e.Graphics,
                    new Point(e.Bounds.X, e.Bounds.Y),
                    e.Bounds,
                    box.Text,
                    this.Font,
                    (e.State & DrawItemState.Focus) == 0,
                    box.Checked ? CheckBoxState.CheckedNormal :
                        CheckBoxState.UncheckedNormal);
            }
     
        }

    et pour l'utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MaComboBox comboBox = new MaComboBox();
    comboBox.Items.Add(new MaCheckBox(Guid.NewGuid(), "item1", true));
    comboBox.Items.Add(new MaCheckBox(Guid.NewGuid(), "item2", false));

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Par défaut
    merci pour le code. a vrai dire je l'avais trouvé sur www.codeproject.com
    mais celui-ci présente plusieurs défauts :
    - pas d'hauteur minimum ou maximum
    - pas d'ascenseur
    - lors de multiples survoles, les textes deviennent de plus en plus noirs O_o

    pour ce dernier défaut, j'ai passé 1 heure à filtrer les lignes de code et à voir ce que je pouvais modifier pour l'améliorer, en vain

    non je ne veux pas que quiconque développe à ma place, car je tiens à comprendre ce que je fais ^^
    seulement je n'ai pas l'habitude avec l'héritage ou même la création de composants !
    sinon, il est vrai que ce n'est pas une usine à gaz ! donc il a du mérite ^^

    j'aimerais m'inspirer des fonctions de base de ce projet, pour l'intégration d'une checkbox a chaque ligne, le principe a l'air différent non ?
    http://www.codeproject.com/KB/combob..._combobox.aspx
    seulement je ne comprend pas tout >_<

  7. #7
    Membre émérite 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
    Par défaut
    ça a l'air intéressant, je vais jeter un coup d'oeil ^^

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Par défaut
    le problème c'est que pour ce dernier lien, aucun identifiant n'est utilisé pour chaque item. hors si on veut faire quelque chose de décent avec une base de données... vaut mieux utiliser un GUID ^^
    je fais de nouvelles recherches, je vous tiendrais au courant !

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    techniquement la ComboBox s'en tappe royalement du GUID.

    cette donnée n'est importante que sur les items manipulés par la combobox.
    donc des espèces de checkbox...

    donc dans cet item libre à toi de reprendre un code source et d'y ajouter une propriété supplémentaire représentant soit un GUID ou carrément l'objet ou la donnée à laquelle l'item est attaché, je ne vois vraiment pas où est le problème...

  10. #10
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par thor76160 Voir le message
    le problème c'est que pour ce dernier lien, aucun identifiant n'est utilisé pour chaque item. hors si on veut faire quelque chose de décent avec une base de données... vaut mieux utiliser un GUID ^^
    Sion veut faire quelque chose de décent avec une base de donnée, on a une couche d'objets métiers entre la base et la couche présentation, et on ne stocke certainement pas les ID (qui sont normalement encapsulés dans l'objet métier en question).

  11. #11
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Par défaut
    ma façon de faire semble différente de la votre :/
    quoiqu'il en soit, j'aimerais procéder ainsi.

    je vais essayer de reprendre ce code et d'ajouter en item un objet comprenant 3 propriétés : id, text, checked
    http://www.codeproject.com/KB/combob..._combobox.aspx

  12. #12
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    Bluedeep c'est clair, mais vu son niveau, je ne crois pas que le respect des règles déontologiques et éthiques, et les règles de best practices, constituent son principal soucis.

    S'il a du mal avec l'héritage cela suppose qu'il n'est même pas familiarisé avec le paradigme objet... par conséquent, moi je lui conseillerai de lire un livre genre "la programmation objet, pour les nuls"... lol (faut bien commencer quelque part)
    Temps qu'il ne sera pas à même de vraiment comprendre ce qu'il fait, il n'avancera pas, et lui parler de best practice, de couche métiers... c'est carrément hors de sa portée.
    Le design n-tiers / n-layers nécessite quand même un minimum de connaissances.

    Pour l'instant il se contente de reprendre du code sans trop savoir où il va car ajouter une propriété à une classe qu'il reprend, lui semble déjà tout un monde, bref il n'a même pas acquis cette logique pourtant primordiale pour aller plus avant.

  13. #13
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par cinemania Voir le message
    Bluedeep c'est clair, mais vu son niveau, je ne crois pas que le respect des règles déontologiques et éthiques, et les règles de best practices, constituent son principal soucis..
    Oups .... tu as raison, j'avais raté cette ligne

    seulement je n'ai pas l'habitude avec l'héritage ou même la création de composants !
    En effet, ma suggestion est donc hors de propos

    Ceci dit, si il veut une sorte de liste avec checkbox, le contrôle ListView est fait pour lui. (mais c'est pas un combo).

  14. #14
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Par défaut
    je comprends la notion d'objet, c'est juste la partie de l'héritage avec laquelle je bloque encore un peu.
    et je ne sais pas comment faire apparaitre autre chose que du texte dans un composant tel qu'un combobox ...
    sauriez-vous où je pourrais m'adresser pour corriger ces quelques lacunes svp ?

    je lui conseillerai de lire un livre genre "la programmation objet, pour les nuls"... lol (faut bien commencer quelque part)
    ce n'est pas non plus la peine d'en profiter pour vous moquer hein :p

  15. #15
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    ce n'était pas du tout péjoratif, je ne me serais pas permis.

  16. #16
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Par défaut
    non non tkt je ne l'ai pas pris comme ça, mais c'est vrai que j'ai pas mal de lacunes, alors que je sors d'une licence Pro O_o
    je devrais être capable de faire quelque chose comme ça je pense !
    là je reprends ces classe : http://www.codeproject.com/KB/combob..._combobox.aspx

    j'essaie de les comprendre. la classe PopupComboBox semble être la plus haute dans l'héritage (après combobox). elle semble controler l'apparation de la liste déroulante. mais il y a pleins de choses que je ne comprends pas, comme les fonctions override (la fonction WndProc de la classe PopupComboBox par exemple).

    la classe popup quant à elle, est strictement incompréhensible ! ^^

    bref, je vais essayer de reprendre tout ça, de le simplifier et de retenir uniquement les fonctions qui m'intéressent

  17. #17
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    tu m'aurais dit que tu sortais de licence pro, je t'aurais alors dit que ces lacunes étaient "normales".

    elles ne sont pas normales au sens où il est inadmissible que les étudiants sortent d'une troisième année post-bac avec un niveau si médiocre, mais normale au sens, où c'est la norme... et encore te plaints pas tu as vu de loin le paradigme objet, il y en a qui voient java, dotnet de très loin, sans même un cours sur la programmation objet...

    Pour ce qui est de la méthode WndProc c'est normal, cela fait partie du fonctionnement interne et intime des composants fenêtrés. (Win-Forms)

    La classe Popup en elle même ne t'intéresse pas vraiment, il faut la reprendre certes, mais elle n'est pas primordiale à comprendre.
    Surtout avec l'avènement de WPF et le fait que les composants ne fonctionnent plus du tout de la même façon.

    il est même assez marrant de voir, que ton problème, en WPF se règle en l'espace de 10mn et de quelques lignes de XAML sans même être obligé de créer un composant spécifique ou un UserControl, juste grâce au databinding avancé et aux styles (personnalisation des contrôles standards.)

    sinon pour la notion d'héritage, on peut voir cela comme cela...
    l'héritage sert à spécialiser une classe parente.

    par conséquent, une classe héritière hérite des méthodes publiques exposées par la super-classe... quand tu hérite du manoir des parents, il devient tien... Cela devient ton signe extérieur de richesse...

    jusque là c'est simple, mais parfois il est nécessaire de spécialiser le fonctionnement de certaines méthodes dans une héritière car cette héritière représente un cas particulier, et donc un fonctionnement différent du cas général... à partir de là, on peut voir le problème de plusieurs façons... c'est ça la complexité de l'héritage.
    soit tu veux réécrire la méthode complètement différemment et elle n'a donc rien avoir avec l'implémentation de la classe parente, dans ce cas tu "redéfinie" une nouvelle méthode qui masque la précédente. (mot clé new)
    soit tu veux simplement ajouter un détail au comportement de base, dans ce cas tu hérite de la méthode et la spécialise...
    dans ce cas tu fait un override, car tu la redéfinie, en te réservant le droit toutefois d'appeler le code de la méthode de la super-classe.
    Dans ce cas cela suppose également que dans la super-classe, cette méthode soit considérée comme "overridable" donc virtual pour virtuelle.
    Pourquoi est ce nécessaire ? En C#, en VB.NET, en Java, et de manière générale, dans tout langage objet "moderne", on travail en liaison dynamique car dans 99% des cas, c'est ce mode de fonctionnement qui colle à la logique d'héritage.
    Mais avec des langages comme C++, il existe la possibilité de faire de l'héritage par liaison statique... par conséquent il est nécessaire de spécifier le type de liaison sur une méthode, de plus la spécification explicite, facilite grandement la lecture et la compréhension.

    supposons que j'ai une super classe Dessin, et 2 spécialisations Rectangle et Cercle, seule leur interface commune m'intéresse, et je veux stocker aussi bien des Rectangle que des Cercle...
    si rectangle et cercle héritent de dessn, plutôt que d'avoir une liste pour rectangle et une liste pour Cercle, je vais avoir une liste de formes de type Dessin.
    ici l'héritage fonctionne comme les maths, tout carré est un rectangle, ce qui sous entend que tout Cercle est un Dessin.
    dans Dessin, la méthode dessiner(), est une méthode générique... donc ici rien, vu que le dessin n'est pas une forme particulière, cette méthode ne fait rien.
    Hors dans la spécialisation Rectangle, le dessin devient une forme rectangulaire, et dans la spécialisation Cercle, le dessin devient une forme circulaire.
    Si je fait un appel à la méthode dessiner() de chaque membre de ma liste d'objet, en liaison dynamique, on va utiliser la méthode dessiner() du type EFFECTIF de l'objet, donc mes instances de Cercles vont toutes dessiner un cercle, et mes instances de Rectangle, toutes dessiner un rectangle.
    C'est le fonctionnement logique que tu t'attend à avoir, dans le cas général, mais en liaison statique, il en est tout autre, puisque tu a une liste de Dessin, tu manipule donc le type que tu as déclaré, donc Dessin et ce quelque soit le type EFFECTIF de l'instance en cours, ce qui nous intéresse c'est le type DECLARE, donc tout appel à dessiner, sera l'appel vers le code de la super-classe, donc méthode qui ne fait rien du tout, du coup rien ne sera affiché à l'écran.

    Cela fait partie des notions les plus complexes à comprendre quand on parle d'héritage, une fois cela compris... tout roule.
    Donc tu n'a que deux choses à retenir pour comprendre l'héritage... liaison dynamique, spécialisation.

  18. #18
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Par défaut
    merci pour tes éclaircissement. j'essairais de développer quelques projets avec de l'héritage pour comprendre mieux. et je devrais aussi m'intéresser au WPF. malheureusement je viens de commencer un projet en windowsform et ça va prendre un bout de temps pour le finir. ce n'est donc pas demain que je pourrais m'y mettre :s

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

Discussions similaires

  1. [VBA-E] Comment remplir une comboBox avec une macro
    Par Tchupacabra dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/04/2007, 11h16
  2. [VBA-E]Recherche d'une valeur avec la colonne comme variable
    Par Corlo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/04/2007, 09h21
  3. [C#] Remplir une combobox avec le champs d'une table Access
    Par Damsou dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/06/2005, 15h31
  4. [VB.NET] Remplir une ComboBox avec une requete sql
    Par graphicsxp dans le forum Windows Forms
    Réponses: 6
    Dernier message: 22/03/2005, 15h29
  5. Réponses: 2
    Dernier message: 26/07/2004, 13h34

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