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 :

[ParentControlDesigner] Heritage de 2 classes - Creation d'un control conteneur


Sujet :

C#

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 612
    Par défaut [ParentControlDesigner] Heritage de 2 classes - Creation d'un control conteneur
    Bonjour,

    Tout d'abord je precise que malgrès mon titre je sais qu'on ne peut heritè que d'une seule classe. Dans mon cas il m'en faudrais 2...


    Mon Projet:
    Je realise un UserControl qui contient un Label, une PictureBox, un GroupBox et un SplitContainer

    Avec cette ensemble je voudrais realiser un GroupBox qui pourrais se reduire

    Le Label jou le role de Titre
    La PictureBox contient une fleche et permet d'entendre/reduire le GroupBox
    Le GroupBox genere un encadrè et devras contenir les futur control enfants
    Le SpliContainer est utiliser pour fair "disparaitre" le GroupBox avec "SpliCont.Panel2Collapsed = true"


    nous avons dans une classe heritant de UserControl qui donne le resultat suivant:




    la reaction du UserControl est bonne, il se reduit et étend comme il faut!

    maintenant il faut qu'il devienne conteneur, pour qu'en mode designer je puisse glisser/deposer des controls et qui soit integret dans mon UserControl

    pour qu'il devienne conteneur j'utilise
    http://support.microsoft.com/kb/813450/fr


    sa marche!
    en mode designer j'ajoute un GroupBoxExpendable(mon UserControl) puis je depose sur celui-ci un nouveau CommandButton, si je bouge mon control, le bouton bouge avec


    il faut maintenant que je puisse modifier les fonctions ajout/suppresion de control enfant de mon conteneur pour, au lieu de les ajouter a mon UserControl ils soit ajouter a MonUserControl.GroupBox.Controls


    pour ce fair il faudrais, d'après ce que je peut y lire, overridè certaine fonction de ParentControlDesigner
    http://msdn.microsoft.com/fr-fr/libr...er(VS.80).aspx


    voila mon problème!! ParentControlDesigner n'heriter pas de Control ou encore UserControl....


    ainsi si j'herite de UserControl je ne peut modifier les fonctions d'ajout/suppresion de control enfant

    si j'herite de ParentControlDesigner je peut les modifier, mais au final je n'ai plus un UserControl.....


    merci pour votre aide


    EDIT: je sais que j'ai deja crèè un sujet pour ce projet mais le problème a changer

    j'ai donc fait un historique de mes travaux ici (pour de possible futur lecteur) et mis l'ancien sujet en delestage

  2. #2
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 359
    Par défaut
    Bonjour TheBlackReverand

    Bon, pour hériter de 2 classes, il y a ce lien, que je n'ai jamais utilisé, n'en ayant pas l'utilité, mais ça devrait marcher : http://www.codeproject.com/KB/architecture/smip.aspx

    En espérant que ça t'aide plus que le AccessibleRole !!!

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ce n'est pas ton contrôle qui doit hériter de ParentControlDesigner. Il faut que tu fasses une autre classe (ExpandableGroupBoxDesigner par exemple) qui, elle, hérite de ParentControlDesigner et redéfinit les méthodes nécessaires. Ensuite tu indiques, via l'attribut Designer, que ExpandableGroupBoxDesigner est le designer à utiliser pour ExpandableGroupBox

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 612
    Par défaut
    a d'accord!! je comprend mieu maintenant!!

    je met en application des se soir

    merci pour tout!!!

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 612
    Par défaut
    sa compile mais je ne peut fair ce que je veu....

    acutellement j'ai donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    using System.Windows.Forms;
    using System.Windows.Forms.Design;
     
    namespace TheBlackReverand.Composants
    {
        public class GroupBoxExtendableDesigner : ParentControlDesigner
        {
     
     
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    using System;
    using System.ComponentModel;
    using System.ComponentModel.Design;
    using System.Drawing;
    using System.Windows.Forms;
     
    namespace TheBlackReverand.Composants
    {
        [Designer("TheBlackReverand.Composants.GroupBoxExtendableDesigner, TheBlackReverand.Composants", typeof(IDesigner))]
        public partial class GroupBoxExtendable : UserControl
        {
    le problème est que les fonctions de ParentControlDesigner ne sont pas overridable

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par TheBlackReverand Voir le message
    le problème est que les fonctions de ParentControlDesigner ne sont pas overridable
    ah ? quand je fais une classe héritée de ParentCOntrolDesigner et que je tape "override", je vois une longue liste de fonctions et propriétés que je peux overrider...

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 612
    Par défaut
    oui je ne dit pas qu'il est completement impossible d'overider mais les fonctions qui m'interesse (AddChildControl entre autre) ne sont pas disponible

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Si une méthode n'est pas virtuelle, c'est que tu n'es pas supposé avoir besoin de l'overrider
    Je crois qu'il faut overrider GetParentForComponent pour indiquer le sous-contrôle qui sert de container effectif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    protected override Control GetParentForComponent(IComponent component)
    {
        return (this.Control As GroupBoxExtendable).GroupBox;
    }
    (d'après Reflector l'implémentation héritée renvoie this.Control)

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 612
    Par défaut
    a d'accord donc meme pas besoin de fair

    Ajout() { ajouter dans this.Control.GroupBox }
    Supprimer() { Supprimerdans this.Control.GroupBox }


    mais
    ComposantParent() { utiliser this.Control.GroupBox }

    je test dans la seconde

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 612
    Par défaut
    sa ne marche pas, il me genere une erreur de cast

    j'ai tenter d'y inseret un label et il me dit qu'il est impossible de caster un label en GroupBoxExtendable

    je pense donc que la fonction renvoy le parent du control que l'on veut ajouter...


    en passant j'ai trouver sa, container sert par la suite a fair un "Add(component)"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bool IOleDragClient.AddComponent(IComponent component, string name, bool firstAdd)
    {
            IContainer container = DesignerUtils.CheckForNestedContainer(base.Component.Site.Container);

    merci pour votre aide

Discussions similaires

  1. probleme d'heritage entre 2 classes
    Par Shrine dans le forum C++
    Réponses: 6
    Dernier message: 11/08/2007, 22h27
  2. [Classe][Creation dynamique composant]
    Par daheda dans le forum C++Builder
    Réponses: 2
    Dernier message: 29/04/2007, 16h38
  3. Heritage par sous classe avec discriminateur
    Par hipchic dans le forum Hibernate
    Réponses: 1
    Dernier message: 04/01/2007, 19h51
  4. Heritage de plusieur classes
    Par JiJiJaco dans le forum Langage
    Réponses: 10
    Dernier message: 26/12/2005, 19h12
  5. [heritage] etendre une classe interne en dehors du package
    Par ChristopheH dans le forum Langage
    Réponses: 2
    Dernier message: 11/10/2004, 14h15

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