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 :

[VS2008] Ajouter un contrôle personnalisé dans la toolbox


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 18
    Par défaut [VS2008] Ajouter un contrôle personnalisé dans la toolbox
    bonjour a tous !

    Je suis en train de développer une petite application en C# qui requiert une ListBox personnalisée. J'ai donc codé une classe héritée de la listbox afin d'arriver a ce que je voulais, ca fonctionne. voici au passage le code (ca servira pas a grand chose mais on sait jamais) :

    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
    100
    101
    102
    103
    104
    105
    106
    107
    108
     public class AnalyseListBox : System.Windows.Forms.ListBox
        {
     
            private ArrayList m_aValeurAnalyse = new ArrayList();
            private SolidBrush m_SBwrited= new SolidBrush(Color.Green);
            private SolidBrush m_SBunwrited = new SolidBrush(Color.Red);
            private SolidBrush m_SBselectedItem = new SolidBrush(Color.White);
     
            public AnalyseListBox()
            {
                this.DrawMode = DrawMode.OwnerDrawVariable;
     
            }
     
            public void Clear()
            {
                m_aValeurAnalyse.Clear();
                this.Items.Clear();
            }
     
     
            public void AddItem(String NomAnalyse)
            {
                m_aValeurAnalyse.Add((double)0);
                this.Items.Add(NomAnalyse);
            }
     
     
            public void SetWritedColor(Color Couleur)
            {
                m_SBwrited = null;
                m_SBwrited = new SolidBrush(Couleur);
            }
     
     
            public void SetUnwritedColor(Color Couleur)
            {
                m_SBunwrited = null;
                m_SBunwrited = new SolidBrush(Couleur);
            }
     
            public void SetItemValue(int ItemIndex,double value)
            {
                if (ItemIndex <= m_aValeurAnalyse.Count-1 && ItemIndex >=0)
                {
                    m_aValeurAnalyse[ItemIndex] = value;
                }
            }
     
            public double GetItemValue(int ItemIndex)
            {
                if (ItemIndex <= m_aValeurAnalyse.Count - 1 && ItemIndex >= 0)
                {
                    return (double)m_aValeurAnalyse[ItemIndex];
                }
                return -1;
            }
     
            protected override void OnDrawItem(DrawItemEventArgs e)
            {
                SolidBrush TempBrush = null;
     
                if (DesignMode && this.Items.Count == 0)
                    base.OnDrawItem(e);
                else
                {
                    e.DrawBackground(); 
                    e.DrawFocusRectangle();
                    Rectangle Rect = e.Bounds;
     
     
                    if(this.Items.Count > 0)
                    {
                        if (GetSelected(e.Index))
                        {
                            TempBrush = new SolidBrush(Color.White);
                            if ((double)m_aValeurAnalyse[e.Index] > 0)
                                e.Graphics.FillRectangle(m_SBwrited, Rect);
                            else
                                e.Graphics.FillRectangle(m_SBunwrited,Rect);
                        }
                        else if ((double)m_aValeurAnalyse[e.Index] > 0)
                        {
                            TempBrush = m_SBwrited;
                        }
                        else
                        {
                            TempBrush = m_SBunwrited;
                        }
     
                    }
     
                    e.Graphics.DrawString(this.Items[e.Index].ToString(), Font, TempBrush, e.Bounds);
     
                    base.OnDrawItem(e);
     
                }
     
     
            }
     
            protected override void OnMouseDown(MouseEventArgs e)
            {
                this.Invalidate();
                base.OnMouseDown(e);
            }
     
        }




    le soucis auquel je me heurte est d'ordre pratique en fait, je ne sais pas du tout comment ajouter la classe de listbox personnalisé a la boîte a outils afin de pouvoir la glisser déposer directement dans le designer.


    pour l'instant, je développe en mode "mac gyver" en glissant déposant une listbox standard dans le designer, puis en modifiant le code source généré par VS afin de transformer la Listbox en "AnalyseListbox". le soucis c'est qu'a chaque fois que j'édite le designer , celui ci re-génère le code , et je dois faire la modif a chaque fois....

    quelqu'un pourrais me renseigner sur la manière d'ajouter une classe héritée d'une listbox dans la boîte a outils ?


    merci d'avance pour vos réponses !

  2. #2
    Membre éprouvé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 76
    Par défaut
    Salut,

    Tu as vérifié si l'option "AutoToolboxPopulate" dans le menu "Tools > Options > Windows Form Designer" est mise à "True" (désolé, mon studio est en anglais).

    A+

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/04/2012, 10h12
  2. [CR 2008] Ajout de totaux personnalisé dans un tableau croisé
    Par hokidoki dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 04/03/2011, 11h25
  3. Ajouter une tâche personnalisé dans la barre des tâches Windows 7
    Par Wriggles dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 03/02/2011, 07h45
  4. Ajouter un composant personnalisé dans la boite à outils
    Par soad dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 26/01/2009, 20h05
  5. [VB.NET] Contrôle personnalisé dans une dll personnalisée
    Par c3b12 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 15/10/2004, 07h56

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