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 :

[VS] problèmes avec mon custom control


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    médical
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : médical

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 71
    Points
    71
    Par défaut [VS] problèmes avec mon custom control
    bonjour, j'ai crée un custom control, et il se trouve que j'ai 2 problèmes

    1) voici la définition du custom control

    abstract class A :Control
    class B: A (contient des fonctions de base)
    class C : B

    mais une fois ajoutées dans la toolbox de visual studio, il apparaît B et C, hors je ne veux que C


    2) je souhaiterais cacher des propriétés par défaut de l'objet Control qui s'affiche dans les propriétés de mon control custom quand je suis en édition... comment faire ?

    3) je voudrais savoir si il n'y a pas un raccourcis du même genre que [description("nnn")] pour faire l'équivalent de /// <summary></summary> ?

    merci d'avance pour vos réponses

  2. #2
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Bonsoir,

    pour tes réponses,

    1 - Ta classe B ne doit pas être publique ou alors rends la abstraite aussi pour qu'elle ne se retrouve pas dans la toolbox de VS

    2 - l'attribut Browsable.

    3 - c'est pas un raccourci, mais comme tu l'as deviné c'est l'attribut Description si tu veux afficher des explications au niveau de la fenêtre de propriétés de VS ou bien je n'ai pas très bien compris ton 3ème point.

    Bon dév

  3. #3
    Membre régulier
    Homme Profil pro
    médical
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : médical

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 71
    Points
    71
    Par défaut
    1 - Ta classe B ne doit pas être publique ou alors rends la abstraite aussi pour qu'elle ne se retrouve pas dans la toolbox de VS
    merci, c'ets bon, abstract public class B : A et tout roule!!!


    donc je vais être obligé de déclarer override chaque propriétés non désirées pour lui attribuer l'attribut Browsable ?? c'est un truc de fou

    3 - c'est pas un raccourci, mais comme tu l'as deviné c'est l'attribut Description si tu veux afficher des explications au niveau de la fenêtre de propriétés de VS ou bien je n'ai pas très bien compris ton 3ème point.
    c'était pour afficher l'aide en ligne de la fonction/méthode,... quand on tapes du code, mais finalement il me créer mes lignes <summary> automatiquement dès que je fais ///, surement un des plugins que j'ai...

  4. #4
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 442
    Points
    4 442
    Par défaut
    bonjour dark poulpo
    Pour la visibilite au Design-Time pour le Designer et la ToolBoox VS il y a un short-cut plus expeditif (plutot que de rendre B "abstract" ce qui changerait l'archicture des class pour des raisons de design.....) c'est :

    -decorer les classes B et C avec l'attributDesignTimeVisible

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     public abstract class  A:Control
        {
        }
        [DesignTimeVisible(false)]
        public class B : A 
        {
        }
        [DesignTimeVisible(true)]
        public class C : B
        {
        }
    Pas besoin pour A car il est abstract............
    bon code....................

  5. #5
    Membre régulier
    Homme Profil pro
    médical
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : médical

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par MABROUKI Voir le message
    bonjour dark poulpo
    Pour la visibilite au Design-Time pour le Designer et la ToolBoox VS il y a un short-cut plus expeditif (plutot que de rendre B "abstract" ce qui changerait l'archicture des class pour des raisons de design.....) c'est :

    -decorer les classes B et C avec l'attributDesignTimeVisible

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     public abstract class  A:Control
        {
        }
        [DesignTimeVisible(false)]
        public class B : A 
        {
        }
        [DesignTimeVisible(true)]
        public class C : B
        {
        }
    Pas besoin pour A car il est abstract............
    bon code....................
    cool merci!

  6. #6
    Membre régulier
    Homme Profil pro
    médical
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : médical

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 71
    Points
    71
    Par défaut
    Merci pour votre aide,

    il reste toujours cette question ....

    donc je vais être obligé de déclarer override chaque propriétés non désirées pour lui attribuer l'attribut Browsable ?? c'est un truc de fou

  7. #7
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Overrider, NON!!!

    Si tu met cet attribut sur la classe qui le déclare, les autres en hériterons...
    Pas besoin d'overrider chaque propriété!!!

  8. #8
    Membre régulier
    Homme Profil pro
    médical
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : médical

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par sisqo60 Voir le message
    Overrider, NON!!!

    Si tu met cet attribut sur la classe qui le déclare, les autres en hériterons...
    Pas besoin d'overrider chaque propriété!!!
    j'ai fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [Browsable(false)]
    public abstract class  A:Control
        {
        }
        [DesignTimeVisible(false)]
        public class B : A 
        {
        }
        [DesignTimeVisible(true)]
        public class C : B
        {
        }
    et malgré cela, quand je suis dans l’éditeur, je vois toujours les propriétés de Control,

  9. #9
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 442
    Points
    4 442
    Par défaut
    bonjour dark poulpo
    sisqo60 s'est exprime mal .Voici ce qu'il veut dire concernant l'utilisation del'attribut browsable :il faut decorer les prop la ou elles sont deja implementees et les classe dervees en heritent car les attributs participent à l'heritage(à moins de l'annuler comme on l'a fait pour DesignTime dans le cas du class C sans quoi le class C aurait ete invisible lui-aussi.....)
    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
     
     
     public abstract class  A:Control
        {
            public abstract void MethodeBase();
            public abstract double D { get; set; }
            public abstract string myStr { get; set; }
     
        }
        [DesignTimeVisible(false)]
        public class B : A 
        {
            public override void MethodeBase()
            {
                System.Console.WriteLine("MethodeBase.");
            }
            //proprietes de base implementees par N
            //non browsable dans B et aussi ...dans C
            [Browsable(false)]
            [Description ("Propriete Largeur:Type Double")]
            public override double D { get; set; }
            [Browsable(false)]
            [Description("Propriete Nom:Type string")]
            public override string myStr { get; set; }
            //1 nouvelles propriete propre -B- non browsable dans B =>egalement dans .....C 
            [Browsable(false)]
            [Description("Propriete Number:Type int")]
            public int Number { get; set; }
            //1 nouvelles propriete de -B- browsable dans B =>egalement dans .....C 
            [Browsable(true)]
            [Description("Propriete Size:Type  Size")]
            public Size CSize { get; set; }
        }
        [DesignTimeVisible(true)]
        public class C : B
        {
            //1 nouvelles propriete propre à -C- browsable dans C 
            [Browsable(true)]
            [Description("Propriete newProp:Type  double")]
            public double  NewProp { get; set; }
        }
    mais attention browsable concerne le designer mais pas l'intellisense.
    Bon code...............

  10. #10
    Membre régulier
    Homme Profil pro
    médical
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : médical

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 71
    Points
    71
    Par défaut
    hum, non je pense que c'est moi qui n'arrive pas à faire comprendre ce que je veux

    voici un exemple en image,

    on voit clairement des propriétés héritées de Control. quels soit hérités ok, mais affichées dans l'éditeur je ne veux pas...
    Images attachées Images attachées  

  11. #11
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Ah oui, en effet nous ne nous sommes pas compris.
    Mais sinon oui tu dois toutes les overrider et leur ajouter l'attribut dans ce cas!!!

    Mais je ne comprends pas pourquoi tu ne voudrais pas qu'elles soient affichées???

  12. #12
    Membre régulier
    Homme Profil pro
    médical
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : médical

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 71
    Points
    71
    Par défaut
    parce que beaucoup de ses propriétés ne sont pas gérées par mon control... donc je ne vois pas l’intérêt de les afficher et laisser de faux espoirs ...

    merci pour ta réponse en tout cas...

  13. #13
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 442
    Points
    4 442
    Par défaut
    bonjour dark poulpo
    Excuse-moi sisqo60.
    Et pan sur mon bec mais c'est bien toi qui as bien compris et bien moi qui ai mal compris.
    Mais c'est cette phrase qui m'as mene en bateau.
    2) je souhaiterais cacher des propriétés par défaut de l'objet Control qui s'affiche dans les propriétés de mon control custom quand je suis en édition... comment faire ?
    En fait dark poulpo tu voulais dire "les proprietes herites " d"ou l'on voit que un adjectif oublie vous menera loin...("you want to hide the inherited properties of custum control" )......

    Mais la on va loin car il faut agir sur le designer VS directement.
    pour ce faire :
    - ll te faut une class Concepteur ou ControlDesigner à ajouter à ta class C
    - decorer ta Class C avec un attribut designant ton ControlDesigner.
    - dans ControlDesigner supprimer la visibilite des props (stockees par ControlDesigner dans un dictionnary properties de string avec leur nom simplement grace au TypeDescriptor qui change leur attribut...).....
    Tu peux toujours faire une boucle foreach sur le dictionary properties et hider celle de ton choix grace à la valeur key du dictionary(nom prop).......

    Code la lib des class........
    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
    109
    110
     
    //A jouter une ref à System.Design.dll
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.ComponentModel;
    using System.Drawing;
    using System.ComponentModel.Design;
     
    namespace HeritageControlCSHARP
    {
     
        public abstract class  A:Control
        {
            public abstract void MethodeBase();
            public abstract double D { get; set; }
            public abstract string myStr { get; set; }
     
        }
        [DesignTimeVisible(false)]
        public class B : A 
        {
            public override void MethodeBase()
            {
                System.Console.WriteLine("MethodeBase.");
            }
            //proprietes de base implementees par N
            //non browsable dans B et aussi ...dans C
            [Browsable(false)]
            [Description ("Propriete Largeur:Type Double")]
            public override double D { get; set; }
            [Browsable(false)]
            [Description("Propriete Nom:Type string")]
            public override string myStr { get; set; }
            //1 nouvelles propriete propre -B- non browsable dans B =>egalement dans .....C 
            [Browsable(false)]
            [Description("Propriete Number:Type int")]
            public int Number { get; set; }
            //1 nouvelles propriete de -B- browsable dans B =>egalement dans .....C 
            [Browsable(true)]
            [Description("Propriete Size:Type  Size")]
            public Size CSize { get; set; }
        }
        [DesignTimeVisible(true)]
        [DesignerAttribute(typeof(ClasseC_ControlDesigner), typeof(IDesigner))]
         public class C : B
        {
            //1 nouvelles propriete propre à -C- browsable dans C 
            [Browsable(true)]
            [Description("Propriete newProp:Type  double")]
            public double  NewProp { get; set; }
        }
     
        //simple controldesigner pour la classe C
     
        [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
        public class ClasseC_ControlDesigner : System.Windows.Forms.Design.ControlDesigner
        {
            // In this implementation, the AccessibleDescription, AccessibleName and Dock
            //property is hidden from any PropertyGrid or Properties window. This is done by 
            // creating a copy of the existing PropertyDescriptor and
            // attaching two new Attributes: Browsable and EditorBrowsable.
            protected override void PostFilterProperties(System.Collections.IDictionary properties)
            {
                PropertyDescriptor pd;
                //3-prop AccessibleDescription
     
                pd = properties["AccessibleDescription"] as PropertyDescriptor;
                pd = TypeDescriptor.CreateProperty(
                           pd.ComponentType,
                           pd,
                           new Attribute[2] { 
                    new BrowsableAttribute(false),
                    new EditorBrowsableAttribute(EditorBrowsableState.Never)});
                properties[pd.Name] = pd;
     
                //3-prop AccessibleName
     
                pd = properties["AccessibleName"] as PropertyDescriptor;
                pd = TypeDescriptor.CreateProperty(
                           pd.ComponentType,
                           pd,
                           new Attribute[2] { 
                    new BrowsableAttribute(false),
                    new EditorBrowsableAttribute(EditorBrowsableState.Never)});
                properties[pd.Name] = pd;
     
     
                //3-prop Dock
                pd = properties["Dock"] as PropertyDescriptor;
                pd = TypeDescriptor.CreateProperty(
                           pd.ComponentType,
                           pd,
                           new Attribute[2] { 
                    new BrowsableAttribute(false),
                    new EditorBrowsableAttribute(EditorBrowsableState.Never)});
                properties[pd.Name] = pd;
     
     
                // Always call the base PostFilterProperties implementation 
                // after you modify the properties collection.
                base.PostFilterProperties(properties);
     
     
            }
     
        }
    }
    code form d'utilissation pour illustrer que hiding garde la prop dock visible dans l'intellisense:
    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
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace HeritageControlCSHARP
    {
        public partial class Form1 : Form
        {
     
            public Form1()
            {
                InitializeComponent();
                // nb:la prop Dock est invisible mais disponible 
                // dans l'intellisense
                this.c1.Dock = DockStyle.Fill;
                this.c1.Enabled = true;
     
            }
        }
    }
    Mais que diable dark poulpo est-il alle faire dans cet galere?
    La reconnais-tu cette question? "Les fourberies de Scapin" de Moliere.......................
    bon code......

  14. #14
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Citation Envoyé par MABROUKI Voir le message
    Mais que diable dark poulpo est-il alle faire dans cet galere?
    Assez d'accord
    Pourquoi mets-tu en place une classe qui hérite de control, alors que tu ne souhaites pas gérer toutes les propriétés de control? A mon sens, ta classe ne devrait alors pas hériter de control, dans ce cas.
    Pourrais-tu nous dire (sans indiscrétion) à quoi servent tes custom controls?

  15. #15
    Membre régulier
    Homme Profil pro
    médical
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : médical

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 71
    Points
    71
    Par défaut
    et bien merci pour tout!

    je vais de ce pas essayer! et fermer le topic si c'est bon!

  16. #16
    Membre régulier
    Homme Profil pro
    médical
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : médical

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par sisqo60 Voir le message
    Assez d'accord
    Pourquoi mets-tu en place une classe qui hérite de control, alors que tu ne souhaites pas gérer toutes les propriétés de control? A mon sens, ta classe ne devrait alors pas hériter de control, dans ce cas.
    Pourrais-tu nous dire (sans indiscrétion) à quoi servent tes custom controls?
    XNA...

    au passage ControlDesigner n'existe pas, j'ai essayé les choix proposés à la place, mais aucun ne renferme PostFilterProperties()

Discussions similaires

  1. Problème de rafraichissement avec un custom control Image
    Par choas dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 16/10/2008, 15h41
  2. [Mail] Problème avec mon script d'envoi de mail
    Par leroivert dans le forum Langage
    Réponses: 18
    Dernier message: 02/12/2005, 00h26
  3. Problème avec mon service mysql et PhpMyAdmin
    Par Fixazo dans le forum Outils
    Réponses: 1
    Dernier message: 28/08/2005, 18h02
  4. problème avec mon lecteur CD
    Par leo13 dans le forum Périphériques
    Réponses: 3
    Dernier message: 16/08/2005, 11h21
  5. Problème avec mon firewall ...
    Par Wis dans le forum Tomcat et TomEE
    Réponses: 15
    Dernier message: 06/04/2004, 08h46

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