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

VB.NET Discussion :

Problèmes à la réalisation d'un framework "maison" (héritage de controls)


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 50
    Par défaut Problèmes à la réalisation d'un framework "maison" (héritage de controls)
    Bonjour à toutes et à tous,

    Je travaille sur plusieurs projets en VB.Net. J'ai développé une librairie commune à ces projets qui regroupe une fenêtre de connection BD Oracle, une fenêtre de chargement et d'autres classes utiles.

    Afin d'uniformiser au maximum le comportement et le style de mes contrôles, j'envisage de créer mes propres contrôles directement hérités de ceux de .Net afin que le style visuel soit facilement gérable et qu'il ne soit pas utile de redéfinir à chaque création d'une nouvelle Form (ex : MyButton inherits Button, MyLabel inherits Label, MyComboBox inherits ComboBox, MyDialogBox inherits Form...)

    Seulement je remarque que l'héritage en VB.Net n'est pas aussi intuitif que ce que je pensais. En héritant une Form de ma Form venant de ma librairie, les propriétés définies ne sont pas forcément récupérées.

    Exemple :

    Je crée une nouvelle classe que j'hérite de System.Windows.Forms.Form. Je la nomme "MyDialogBox".
    Dans le designer, je définis les propriétés suivantes :
    • BackColor = Red
    • Font = MS sans serif 10pt
    • FormBorderStyle = FixedDialog
    • MaximumBox = False
    • MinimumBox = False
    • ShowIcon = False
    • ShowInTaskbar = False
    • StartPosition = CenterScreen
    • TopMost = True


    Maintenant que ma boite de dialogue "template" de mon framework est définie, je souhaite créer une nouvelle Form "MyForm" dérivée de MyDialogBox.
    En théorie, MyForm devrait avoir les même propriétés que celles définies dans MyDialogBox. Pourtant je ne vois aucun changement, la couleur de fond n'est pas rouge, les cases maximiser et minimiser sont toujours présentes, etc...

    Aurais-je oublié quelque chose ?
    Ou bien y a-t'il des limitations en .Net pour faire ce genre de chose ?

    J'aimerais faire la même chose avec des contrôles de base comme les boutons ou les labels qui doivent avoir une taille et une police de caractères prédéfinies à partager dans tous mes projets. Est-ce que c'est possible ?

    Je dois également prévoir du multilinguisme pour mes fenêtres (c'est la première fois que je me lance là dedans). Je remarque que la propriété Localizable n'est disponible que dans le designer (?!), elle est inexistante dans le code... Est-ce qu'on peut tout de même hériter du multilingisme ?

    J'espère que vous pourrez m'éclairer à ce sujet.
    A priori, cela me semblait simple à réaliser, mais plus j'avance là-dedans et plus tout cela me semble bien compliqué

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    tu as raison sur le principe, je ne sais pas ce qui cloche chez toi
    si tu fais un form rouge, et qu'un nouveau form hérite de celui ci il est bien rouge (sur un form existant c'est moins sur, car le designer est exécuté avec les anciennes valeurs, pour les valeurs non défaut)

    que ca soit pour les controles ou les forms, en passant par de l'héritage c'est bien pour une nouvelle appli, pour une appli existante ca peut etre long, car il faudrait supprimer tous tes boutons pour poser des mybouton, refaire les liaisons des events etc...

    une autre méthode et de faire une form de base, que toutes les forms en héritent et de faire par code la gestion du thème
    sur un form il y a l'event controladded qui te permet alors de vérifier le type du controle ajouté et éventuellement de lui appliquer un backcolor etc... (et tu peux aussi intercepter l'instanciation des forms sur le form de base pour faire par code me.backcolor = red)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 50
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    si tu fais un form rouge, et qu'un nouveau form hérite de celui ci il est bien rouge (sur un form existant c'est moins sur, car le designer est exécuté avec les anciennes valeurs, pour les valeurs non défaut)
    Dans mon exemple, MyForm que j'hérite de MyDialogBox existe déjà. En fait, je voudrais mettre à jour le style de mes Forms existantes. J'en aurai à créer plus tard, mais pour l'instant ce n'est que de la mise à jour.

    Donc le designer est un peu capricieux dans ce cas ? Comment faire pour le forcer à charger la nouvelle définition que je souhaite ? Je devrai obligatoirement réécrire MyForm from scratch ?

    Citation Envoyé par Pol63 Voir le message
    une autre méthode et de faire une form de base, que toutes les forms en héritent et de faire par code la gestion du thème
    sur un form il y a l'event controladded qui te permet alors de vérifier le type du controle ajouté et éventuellement de lui appliquer un backcolor etc... (et tu peux aussi intercepter l'instanciation des forms sur le form de base pour faire par code me.backcolor = red)
    En effet ça pourrait être aussi une solution, merci pour le conseil.

  4. #4
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Concernant le problème d'héritage : à tous les coups le designer a regénéré dans le formulaire enfants des assignations de ces propriétés avec les valeurs par défaut. Voir le fichier .designer.cs pour confirmer. La solution serait alors tout simplement d'écrire manuellement les assignations de ces propriétés dans la classe mère après l'intervention du code généré par le designer.

    Concernant la localisation (le "multilinguisme"), je ne suis pas tout à fait sûr mais je pense que tout sera correctement propagé à travers l'héritage. Au pire tu auras à ajouter quelques lignes de code.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 50
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    Concernant le problème d'héritage : à tous les coups le designer a regénéré dans le formulaire enfants des assignations de ces propriétés avec les valeurs par défaut. Voir le fichier .designer.cs pour confirmer.
    Il s'agit ici de code VB, non C#, et je n'ai pas de fichier designer, seulement un fichier .vb et un fichier .resx.
    Je sais tout de même voir ce qu'initialise le designer via la fonction InitializeComponent dans le fichier .vb, mais je n'y vois aucune affectation qui écraserait ce que j'ai défini dans la classe parente.

    Citation Envoyé par DonQuiche Voir le message
    La solution serait alors tout simplement d'écrire manuellement les assignations de ces propriétés dans la classe mère après l'intervention du code généré par le designer.
    Autrement dit que je fasse mes affectations hors du InitializeComponent de MyDialogBox, et après l'appel de cette fonction ? Je vais essayer...

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    tu es sur quelle version de vb ? car depuis 2005 au moins il y a un fichier designer en vb.net ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 50
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    tu es sur quelle version de vb ? car depuis 2005 au moins il y a un fichier designer en vb.net ...
    Visual Studio 2008 version 9.0.30729.4460 QFE
    Framework .NET 3.5 SP1

  8. #8
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 50
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    tu as raison sur le principe, je ne sais pas ce qui cloche chez toi
    si tu fais un form rouge, et qu'un nouveau form hérite de celui ci il est bien rouge (sur un form existant c'est moins sur, car le designer est exécuté avec les anciennes valeurs, pour les valeurs non défaut)
    J'ai essayé de créer une nouvelle fenêtre "Form1" héritée de MyDialogBox et même ainsi, il ne prend en compte aucune de mes propriétés définies dans la classe parente. Le designer à tout remis dans ses valeurs par défaut.

    J'ai été voir dans le fichier Form1.designer.vb et il n'y a rien là-dedans qui écrase ce que j'ai défini. J'ai tout de même tout commenté dans ce fichier, mais cela ne change rien.

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

Discussions similaires

  1. [CLASSPATH] problème pour réaliser la commande javac
    Par nana1 dans le forum Général Java
    Réponses: 3
    Dernier message: 25/10/2005, 15h47

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