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 :

Surcharger un "Attribute"


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Avatar de blastobi
    Inscrit en
    Avril 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 89
    Par défaut Surcharger un "Attribute"
    Bonjour,
    Je suis en train de travailler sur la définition de concepts en C#. Une IHM permet de les manipuler, avec notamment une PropertyGrid permettant d'afficher leurs propriétés.

    J'ai une classe "GenericElement" possédant deux propriétés : nom et value. Ses propriétés sont éditables dans la propertyGrid.
    J'ai uen seconde classe "OperationalElement" héritant de "GenericElement". Je voudrais que ses propriétés ne soient pas éditables dans la propertyGrid. Pour cela, les propriétés doivent avoir le méta-attribut : [System.ComponentModel.ReadOnly(true)].

    Mon problème se situe ici. J'ai beau placer ce méta-attribut dans ma classe OperationalElement, mes propriétés sont toujours éditables. Y'a t'il une solution (j'espère ^^')

    Merci d'avance !

    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
     
    // Generic Element
    class GenericElement
    {
       private string name;
       public virtual string Name
       {
          get { return this.name; }
          set { this.name = value; }
       }
     
       private string value;
       public virtual string Value
       {
          get { return this.value; }
          set { this.value= value; }
       }
    }
     
    // Operational Element
    class OperationalElement : GenericElement
    {
       [System.ComponentModel.ReadOnly(true)]
       public override string Name
       {
          get { base.name; }
          set { base.name = value; }
       }
     
       [System.ComponentModel.ReadOnly(true)]
       public override string Value
       {
          get { base.value; }
          set { base.value= value; }
       }
    }
    EDIT : petites fautes dans le code

  2. #2
    Membre émérite
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Par défaut
    si tu veux quelle soit pas éditable tu n'a qua pas mettre ta property dans ta grid avec l'attribut [Browsable(false)]

  3. #3
    Membre chevronné
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Par défaut
    J'ai essayé et les propriétés Value et Name sont bien en lecture seule dans la PropertyGrid. Quand tu affectes la propriété SelectedObject, tu affectes bien un objet OptionalElement, et non GenericElement ?

    Petite remarque à part : comment se fait-il que tu as ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class OperationalElement : GenericElement
    {   
       public override string Name
       {
          get { return this.name; }
          set { this.name = value; }
       }
    }
    le champ name n'est normalement pas accessible depuis la classee dérivée !?

  4. #4
    Membre confirmé
    Avatar de blastobi
    Inscrit en
    Avril 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 89
    Par défaut
    Merci pour vos réponses.

    BCmDev, juste une faute d'écriture... Je n'ai pas fourni mon code source sur ce topic, j'ai en fait tapé une version simplifiée reprenant mes principaux besoins.

    Pour être un peu plus précis, j'utilise les DSL Tools pour décrire mes concepts au niveau méta-modèle. Et des concepts héritent d'autres concepts...
    Jusque là, rien de très problématiques. Sauf que j'ai des GenericElement pouvant être totalement modifiés par l'utilisateur au niveau modèle (un modeleur graphique permet aux utilisateurs de manipuler les concepts, un peu comme un diagramme UML) et des OperationalElement qui eux, ne sont qu'en partie éditables (ceux-ci sont initialisés dans le méta-modèle comme briques toute faites et ne peuvent être modifiés).
    Mais je veux quand même que les propriétés soient affichées dans la propertyGrid ^^

    Vu que tu dis que ca marche chez toi BCmDev, je vais tenter sur de petits exempels. Les DSL Tools générant pas mal de code propre, il y a peut être un conflit qui lui est propre.

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