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 :

Appliquer une modification à tous les formulaire de la solution


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Par défaut Appliquer une modification à tous les formulaire de la solution
    Bonjour,

    J'ai une application qui comporte une centaine de formulaires.
    Il se trouve que je voudrais permettre de modifier la couleur de fond de tous les formulaires en un seul clic.
    J'ai donc codé quelque chose qui ressemble à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            Form_Article.BackColor = Color.FromArgb(toInteger(tbx_coul_fond_R.Text), toInteger(tbx_coul_fond_V.Text), toInteger(tbx_coul_fond_B.Text))
            Form_Article.tp_infos.BackColor = Color.FromArgb(toInteger(tbx_coul_fond_R.Text), toInteger(tbx_coul_fond_V.Text), toInteger(tbx_coul_fond_B.Text))
            Form_Article.tp_stats.BackColor = Color.FromArgb(toInteger(tbx_coul_fond_R.Text), toInteger(tbx_coul_fond_V.Text), toInteger(tbx_coul_fond_B.Text))
            Form_Article.dgv_art_cb.BackgroundColor = Color.FromArgb(toInteger(tbx_coul_fond_R.Text), toInteger(tbx_coul_fond_V.Text), toInteger(tbx_coul_fond_B.Text))
            Form_Article.dgv_art_cli.BackgroundColor = Color.FromArgb(toInteger(tbx_coul_fond_R.Text), toInteger(tbx_coul_fond_V.Text), toInteger(tbx_coul_fond_B.Text))
            Form_Article.dgv_art_prix.BackgroundColor = Color.FromArgb(toInteger(tbx_coul_fond_R.Text), toInteger(tbx_coul_fond_V.Text), toInteger(tbx_coul_fond_B.Text))
    Ainsi, la couleur de fond du formulaire article est changée, ainsi que celle des deux TabPage qu'il contient, ainsi que des trois DataGridView qu'il contient.

    Le problème c'est que c'est extrêmement long à faire pour tous mes formulaires.
    Ma question est donc la suivante :

    Existe-t-il un moyen d'appliquer un changement à tous les formulaires de ma solution en une seule fois? Puis à tous les TabControl? Puis à tous les DataGridView? etc...

    Merci pour vos idées

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Une centaine de formulaires ........ A coup sûre ton projet est une vraie usine à gaz....

    As-tu déjà entendu parlés de l'héritage ???

  3. #3
    Membre confirmé
    Homme Profil pro
    Webplanneur
    Inscrit en
    Mars 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Webplanneur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 24
    Par défaut
    Bonjour

    Pourquoi ne pas utiliser le 'PropertyBinding' dans les propriétés des formulaires.
    Utiliser My.Setting

    Créer dans les propriétés de ton projet un paramètre nommé "BackColor" en type : 'System.Drawing.Color'
    et lier tes formulaires avec ce paramètre

    au changement de couleur de ce paramètre tous les backcolor des formulaires changeront de couleur.
    et faire le lien aussi avec les TabControl, les DataGridView.


    voir https://docs.microsoft.com/fr-fr/dot...ramework-4.7.1

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Par défaut
    Bonjour,

    Merci pour vos réponses.
    Je viens de créer un nouveau paramètre BackColor dans les propriétés de mon projet.
    Par contre, où est-ce que je lie un formulaire?
    Dans le Load?
    J'ai regardé le lien que tu as envoyé mais c'est pas du VB alors je ne comprends pas la synthaxe.
    Merci

  5. #5
    Membre confirmé
    Homme Profil pro
    Webplanneur
    Inscrit en
    Mars 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Webplanneur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 24
    Par défaut
    Il faut ouvrir le formulaire
    dans propriété du formulaire prendre (ApplicationSettings)
    cliquer sur (PropertyBinding)
    Chercher 'BackgroundColor' et prendre ton paramètre

    Faire cette opération avec les formulaires et il seront tous liés en couleur de fond avec ton paramètre

    changement de couleur de ton paramètre, les formulaires changent de couleur

    la même opération avec les TabControl, les DataGridView, textbox...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Par défaut
    Merci pour ta réponse.
    En fait j'avais trouvé cette solution mais comment faire pour les lier tous en une seule fois?

    J'essaie quelque chose comme ça mais ça marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    System.Windows.Forms.Form.DefaultBackColor = Color.FromArgb(toInteger(tbx_coul_fond_R.Text), toInteger(tbx_coul_fond_V.Text), toInteger(tbx_coul_fond_B.Text))
    System.Windows.Forms.DataGridView.DefaultBackColor = Color.FromArgb(toInteger(tbx_coul_fond_R.Text), toInteger(tbx_coul_fond_V.Text), toInteger(tbx_coul_fond_B.Text))
    System.Windows.Forms.TabControl.DefaultBackColor = Color.FromArgb(toInteger(tbx_coul_fond_R.Text), toInteger(tbx_coul_fond_V.Text), toInteger(tbx_coul_fond_B.Text))
    Sinon j'avais pensé à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            For Each Formulaire As Forms In Me Jenesaispasquoimettreici
                Form.DefaultBackColor = Color.FromArgb(toInteger(tbx_coul_fond_R.Text), toInteger(tbx_coul_fond_V.Text), toInteger(tbx_coul_fond_B.Text))
            Next
    Merci

  7. #7
    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
    Citation Envoyé par wallace1 Voir le message
    Une centaine de formulaires ........ A coup sûre ton projet est une vraie usine à gaz....
    avec semblerait il l'utilisation des variables par défaut, qui est une betise de microsoft d'avoir rendu ca possible ...


    bref ; en windows forms il est possible de modifier le "thème" de l'appli, mais le problème c'est qu'il faut y penser avant le développement pour que ca soit simple et performant (à savoir refaire une classe pour chaque controle et l'utiliser partout ensuite)
    après développement ca reste légèrement possible mais au prix de rajouter du code peu performant à mon gout

    dans le principe il faudrait déjà que tu fasses une classe formbase et que tous tes forms en héritent
    ensuite il reste possible de modifier tous les controles dans le form load avec du code à un seul endroit (sur le formbase) par contre dans le form load ca va obliger un rendu supplémentaire
    il y a aussi la possibilité d'appeler une méthode shared depuis le sub new après initializecomponent, ce qui prend autant de temps que de modifier l'héritage, avant le rendu donc (mais quand même un double set de certaines propriétés)
    mais dans les 2 cas les controles ajoutés à la volée ne seront pas pris en compte par la boucle récursive qui balayera les controles du form
    donc si tu ajoutes des controles à la volée ces solutions ne sont pas valables

    pour pouvoir gérer aussi les controles à la volée ca devient l'usine à gaz à et à fuite mémoire potentielle, il faut s'abonner à controladded sur formbase, pour être averti de l'ajout d'un control et lui appliquer un thème
    ajouté à cela qu'il faut alors s'abonner à controladded sur ce control (genre si c'est un panel c'est clair qu'il aura des sous controles, et dans l'absolu même un bouton peut avoir des sous control)
    donc tu va te retrouver à poser des dizaines de handles par form, et idéalement il faudrait aussi s'abonner à controlremoved et disposed (s'il existe) pour retirer les handles, donc tu va tripler les handles et les lignes de codes à exécuter


    il y aussi d'autres solutions plus étranges qui permettraient de modifier tout en mode design ce qui évite une perte de perf mais ca devient plus complexe


    alors oui on pourrait se dire "bah pourquoi ils ont pas prévu ça", mais bon winforms se base sur gdi+.dll qui date d'avant les années 2000 ...
    en wpf par contre on peut modifier toute l'interface après coup sans perte de perf et sans s'embêter ^^
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Par défaut
    Quand tu dis qu'il faudrait que je fasse une classe formbase et que tous mes forms en héritent, cela veut dire que je crée un nouveau formulaire comportant un exemplaire d'un Datagridview, d'un TabPage, d'un label et d'un textbox, et que je leur applique la mise en forme que je souhaiterais voir sur tous les autres formulaires, et qu'ensuite j'ajoute du code dans chacun des autres formulaires pour hériter de cette mise en forme, c'est bien ça?

    Si oui, quel est le code que je dois placer dans les autres formulaires afin de mettre en place l'héritage?

    Merci.

  9. #9
    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
    Citation Envoyé par Crusy Voir le message
    Quand tu dis qu'il faudrait que je fasse une classe formbase et que tous mes forms en héritent, cela veut dire que je crée un nouveau formulaire comportant un exemplaire d'un Datagridview, d'un TabPage, d'un label et d'un textbox, et que je leur applique la mise en forme que je souhaiterais voir sur tous les autres formulaires, et qu'ensuite j'ajoute du code dans chacun des autres formulaires pour hériter de cette mise en forme, c'est bien ça?
    pas du tout
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    A ce stade crusy, il faudrait tout bonnement te tourner vers quelque cours vbnet

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/10/2016, 10h38
  2. Appliquer une image à tous les formulaires d'une base
    Par Jean-Philippe André dans le forum Contribuez
    Réponses: 1
    Dernier message: 01/02/2012, 11h27
  3. [XL-2007] Appliquer une macro à tous les classeurs d'un dossier
    Par Robinno dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 21/11/2010, 16h50
  4. Changer une propriété tous les Formulaires et Etats
    Par possible924 dans le forum VBA Access
    Réponses: 0
    Dernier message: 16/07/2010, 08h51
  5. Appliquer une police à tous les contrôles d'une application
    Par Electroniktor dans le forum Windows
    Réponses: 2
    Dernier message: 07/02/2009, 20h16

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