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 :

[C# 1.1] Comment Overrider GetType() ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    dev
    Inscrit en
    Juin 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Juin 2003
    Messages : 57
    Par défaut [C# 1.1] Comment Overrider GetType() ?
    Bonjour à tous !


    Dans le cadre d'une application je dois faire certains traitements (changements de thèmes) sur les controles composants mes formulaires.

    Tous mes formulaires héritent d'une classe MyForm dans laquelle sont effectués ces traitements.
    J'y parcours donc la collection de controles de mon form, et, suivant le type de chaque contrôle (identifié grâce a la fonction GetType() ) j'applique ou non le thème spécifié .

    ex :
    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
     
    foreach (System.Windows.Forms.Control Ctrl in this.Controls)
    {
    	switch (Ctrl.GetType().ToString())
    	{
    		case "System.Windows.Forms.Panel":
    		        //traitement spécifique aux panels
                            break;
     
    		case "System.Windows.Forms.GroupBox":
    		    //traitement spécifique aux groupboxes
                            break;
    		case "System.Windows.Forms.Button":
    		   //traitement spécifique aux buttons
                            break;
                    default:
    			break;
    	}
    Le problème vient du fait que j'utilise un certain nombre d' UserControls sur lesquels les themes doivent aussi s'appliquer, or les composants devant etre réutilisés il ne me parait pas judicieux de rajouter un test "case" spécifique pour chacun de mes UserConrol, il serait plus intéréssant de n'en rajouter qu'un seul :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    case "System.Windows.Forms.UserControl":
         //traitement spécifique aux user controls
        break;
    La où ça coince c'est qu'il faudrais donc qu'un GetType() sur un de mes UserControl ne renvoit pas son type (ex : cntMonControl1) mais le type de son Parent : "System.Windows.Forms.UserControl".

    J'ai donc essayé d'overrider GetType() dans mes UserControl mais cela n'est pas permis, de plus un base.GetType() sur un UserControl de type cntMonControl1 ne renvoit pas "System.Windows.Forms.UserControl" mais bien "cntMonControl1"


    J'ai donc deux questions :

    1 : comment a partir d'une classe fille obtenir le type de mon Parent (ex : si une classe "MyButton" hérite de "System.Windows.Forms.Button", comment obtenir "System.Windows.Forms.Button" depuis un objet de type "MyButton")

    2 : comment lorsque j'aurais obtenu le type de mon parent, overrider le GetType() de ma classe fille pour qu'il renvoit le type de la classe parente)
    (ex : un GetType() sur une instance de ma classe "MyButton" ne renverrait pas "MyButton" mais "System.Windows.Forms.Button"


    Merci d'avance pouyr vos réponses !

  2. #2
    Membre confirmé Avatar de Manralf
    Inscrit en
    Août 2005
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 43
    Par défaut
    Bonjour, je pense que le plus simple serait que tu fasses les tests qui posent problème avant ton switch. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UserControl uc = Ctrl as UserControl; // Renvoie une référence non nulle s'il s'agit d'un objet dérivant de UserControl
    if( null != uc )
    {
      // ici, traitement pour customizer ton UserControl
     
      continue; // Pour ne pas aller dans le switch
    }

  3. #3
    Membre confirmé
    Profil pro
    dev
    Inscrit en
    Juin 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Juin 2003
    Messages : 57
    Par défaut
    Merci bien , cela fonctionne en effet !!!

    Par contre si quelqu'un sait si il y a possibilité d'ovverrider GetType() cela m'intéresse quand meme, je risque d'en avoir besoin plus tard !


    Encore Merci pour ton aide

  4. #4
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Citation Envoyé par hardballer
    Merci bien , cela fonctionne en effet !!!
    Par contre si quelqu'un sait si il y a possibilité d'ovverrider GetType() cela m'intéresse quand meme, je risque d'en avoir besoin plus tard !
    Encore Merci pour ton aide
    En plus de perturber toute la chaine de Reflection, celà me semble inutile d'overrider quand tu peux faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    instance.GetType().BaseType;

  5. #5
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    VB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Obj.GetType().IsSubClassOf(BaseType) Or (Obj.GetType.FullName = BaseType.FullName)

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

Discussions similaires

  1. Comment créer un @Override ?
    Par Telemak dans le forum NetBeans
    Réponses: 5
    Dernier message: 03/12/2011, 20h56
  2. [Joomla!] Comment Overrider mod_mainmenu\legacy.php
    Par mickael.camelot dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 29/09/2011, 12h08
  3. [TabItem] Comment gérer correctement les RoutedMessages sur un overrided ?
    Par ikeas dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 02/10/2008, 13h28
  4. [VB.NET]Comment correctement utiliser Overrides/Overloads?
    Par NicolasJolet dans le forum VB.NET
    Réponses: 5
    Dernier message: 21/03/2006, 10h39
  5. Comment mettre virtual et override à la fois ?
    Par WebPac dans le forum Langage
    Réponses: 8
    Dernier message: 23/11/2004, 14h38

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