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 :

Designer qui ne réactualise pas une ClassLibray


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 107
    Points : 66
    Points
    66
    Par défaut Designer qui ne réactualise pas une ClassLibray
    Bonjour,

    Situation de départ:
    J'ai créer une librairie de classe (ClassLibrary2) contenant une classe Component (RichTextBoxRapide.cs) dont j'ai réglé la couleur de fond en bleue.
    En parallèle, j'ai créé une application WinForm (Developpez) avec la classe (Form1.cs)
    J'ai ensuite ajouter dans les références de l'application (Devellopez), la librairie (ClassLibrary2.dll) située dans la bibliothèque de classe.
    Et ajouter le RichTextBoxRapide sur Form1 à partir de la boite à outil.
    Le RichTextBoxRapide a un fond bleu au départ de la compilation.
    La couleur du RichTextBoxRapide est bleue et donc OK à l'exécution.

    Là où ça se complique:
    Je modifie la couleur de fond du RichTextBox en rouge dans le code de RichTextBoxRapide.cs
    Je Rebuild tous les projets.

    Et là où ça bloque:
    Aucune modification de la couleur de fond du RichBoxText dans le designer de Form1 !
    Et aussi aucune modification de couleur à l'exécution sur la Form1 !

    Pourquoi mon nouveau code de couleur n'est pas du tout pris en compte?

    Je ne comprends pas.

    Et vous?

    Class1.cs dans ClassLibrary2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace ClassLibrary2
    {
        public class Class1
        {
        }
    }
    Dans RichTextBoxRapide.cs:
    Avant: BackColor = Color.CadetBlue;
    Après: BackColor = Color.Red;

    RichTextBoxRapide.cs dans ClassLibrary2:
    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
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Drawing;
     
    namespace ClassLibrary2
    {
        public partial class RichTextBoxRapide : System.Windows.Forms.RichTextBox
        {
            public RichTextBoxRapide()
            {
                InitializeComponent();
                BackColor = Color.CadetBlue; // Avant puis après:
             // Backcolor = Color.Red , puis Rebuild , et pas de modification dans le designer de Form1, ni à l'exécution (?)
            }
     
            public RichTextBoxRapide(IContainer container)
            {
                container.Add(this);
                InitializeComponent();
            }
        }
    }
    Form1.cs dans Developpez:
    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
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
     
    namespace Developpez
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
        }
    }

  2. #2
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    Bonjour

    Quant tu fais Ajouter la Reference :
    -le fichier Library.Dll est copie dans le dossier de Devellopez ...et c'est de cette dll qu'est extrait le code utilize par Dellopez...

    Quant tu fais Regenerez Tout Library.dll est regenere ansi Devellopez.exe sont bien regeneres ...ma la copie de la dll n'est pas faite

    Remede du docteur Sqolli (Galien le sicilien en arabe):
    -suprrimer la reference à Library.dll puis la rajouter à nouveau.....

    bon code...

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 107
    Points : 66
    Points
    66
    Par défaut
    Donc pour toi la solution consiste, manuellement, à redéfinir la librairy.dll dans les références à chaque modification du code.

    C'est pas très pratique car il faut alors rajouter, puis repositionner à nouveau le control sur la Form1 en mode design et donc c'est pas pratique du tout.

    N'existe t-il pas un réglage dans Visual Studio pour relier dynamiquement la nouvelle compilation de façon transparente en mode Design et lors de l'exé ?

  4. #4
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    re
    un detour ou "workaround" c'est de reference directement le fichier .dll dans le dossier Debug du projet Library ...
    Le Designer de VS esta ansi fait.........
    Amen ....

  5. #5
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    Salut

    Enfin, normalement, la solution la plus simple est, si les deux projets sont dans la même solution de référencer non pas une dll via l'explorer de VS mais
    plutôt d'ajouter une référence à un des projets de la solution.

    Comme ça, t'es sur que tu n'auras pas de soucis
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 107
    Points : 66
    Points
    66
    Par défaut
    J'ai dans l'explorateur de solution:

    solution 'Developpez'(2 projets)
    ->ClassLibray2 (bibliothèque de) classe
    ...
    ->Références
    ->Class1.cs
    ->RichTextBoxRapide.cs
    ->Developpez
    ...
    ->Références (*)
    ClassLibray2(assembly)
    ...
    ->Form1.cs
    ->Form1.Designer.cs
    ...

    Questions:
    pour MABROUKI -> j'ai référencer le fichier "...\Devellopez\RichTextBoxRapide\ClassLibrary2\ClassLibrary2\bin\Debug\ClassLibrary2.dll" dans les références du projet "Developpez" et aucune réactualisation du composant RichTextBox dans Form1 en mode designer puis exé (?)
    pour theMonz31 -> je ne comprend ton passage "...plutôt d'ajouter une référence à un des projets de la solution.". Car je ne vois pas d'autre manière via l'explorateur de solution de référencer (*) "ClassLibray2.dll" dans le projet "Développez" (?)

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 107
    Points : 66
    Points
    66
    Par défaut
    Désolé (problème d'affichage), je rédite mes questions ...

    J'ai dans l'explorateur de solution:

    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
     
    solution 'Developpez'(2 projets)
    ->ClassLibray2 (bibliothèque de) classe
    	...
    	->Références
    	->Class1.cs
    	->RichTextBoxRapide.cs
    ->Developpez
    	...
    	->Références (*)
    		ClassLibray2(assembly)
    		...	
    	->Form1.cs
    		->Form1.Designer.cs
    ...
    Questions:
    pour MABROUKI -> j'ai référencer le fichier "...\Devellopez\RichTextBoxRapide\ClassLibrary2\ClassLibrary2\bin\Debug\ClassLibrary2.dll" dans les références du projet "Developpez" et aucune réactualisation du composant RichTextBox dans Form1 en mode designer puis exé (?)
    pour theMonz31 -> je ne comprend ton passage "...plutôt d'ajouter une référérence à un des projets de la solution.". Car je ne vois pas d'autre manière via l'explorateur de solution de référencer (*) "ClassLibray2.dll" dans le projet Devellopez (?)

  8. #8
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2003
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Luxembourg

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 274
    Points : 372
    Points
    372
    Par défaut
    Salut HELICES,

    Je pense que le soucis vient du fait que dans le Form1.Designer.cs il y a certainement une ligne telle que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.richTextBoxRapide1.BackColor = System.Drawing.Color.CadetBlue;
    De ce fait, tu peux faire ce que tu veux: supprimer la référence puis la rajouter, changer le code de ta dll, bref, il ne changera jamais la couleur car elle est définie dans le designer.

    Je ne suis pas compétant en Winforms mais par contre j'ai essayé de reproduire ton projet.
    Chez moi, je ne peux pas utiliser les comme tu le fais dans ton projet.
    As-tu mis tout ton code ?

    Cordialement,
    Vous avez la réponse à votre question ? Mettez votre sujet en

    Une personne vous a correctement aidé ? Cliquez sur le

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 107
    Points : 66
    Points
    66
    Par défaut
    Fichier Form1.Designer.cs:
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    namespace Devellopez
    {
        partial class Form1
        {
            /// <summary>
            /// Variable nécessaire au concepteur.
            /// </summary>
            private System.ComponentModel.IContainer components = null;
     
            /// <summary>
            /// Nettoyage des ressources utilisées.
            /// </summary>
            /// <param name="disposing">true si les ressources managées doivent être supprimées*; sinon, false.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
     
            #region Code généré par le Concepteur Windows Form
     
            /// <summary>
            /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
            /// le contenu de cette méthode avec l'éditeur de code.
            /// </summary>
            private void InitializeComponent()
            {
                this.components = new System.ComponentModel.Container();
                this.richTextBoxRapide1 = new ClassLibrary2.RichTextBoxRapide(this.components);
                this.SuspendLayout();
                // 
                // richTextBoxRapide1
                // 
                this.richTextBoxRapide1.BackColor = System.Drawing.Color.Red;
                this.richTextBoxRapide1.Location = new System.Drawing.Point(550, 190);
                this.richTextBoxRapide1.Name = "richTextBoxRapide1";
                this.richTextBoxRapide1.Size = new System.Drawing.Size(100, 96);
                this.richTextBoxRapide1.TabIndex = 0;
                this.richTextBoxRapide1.Text = "";
                // 
                // Form1
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(761, 537);
                this.Controls.Add(this.richTextBoxRapide1);
                this.Name = "Form1";
                this.Text = "";
                this.Load += new System.EventHandler(this.Form1_Load);
                this.ResumeLayout(false);
     
            }
     
            #endregion
     
            private ClassLibrary2.RichTextBoxRapide richTextBoxRapide1;
        }
    }
    Il y a bien une ligne qui redéfinit Backcolor à Red, donc l'affichage est redéfinie invariablement à Red.
    Mais ce que je recherche à trouver (réglage de VS, options (?)), c'est lors d'une Rebuild de la solution (le fichier ClassLibray2.dll est recalculé avec la nouvelle couleur), c'est qu'automatiquement la ligne
    "this.richTextBoxRapide1.BackColor=System.Drawing.Color.Red" ci-dessus ce remodifie avec la nouvelle couleur modifié dans la librairie.
    Pourquoi le fichier "Form1.Designer.cs" ne se remodifie pas ?

  10. #10
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    re

    Ah bah,eagleleader a raison...!!!
    Le code du control est auto-genere dans Form1.cs à chaque fois qu'on droppe un control
    Le remede est donc :
    - Ajouter la Reference au projet Devellopez "normalement" une seule fois
    Lors des modifs dans ta Lib:
    1/ Rebuikd du projet Devellopez
    2/ Supprimer puis Redroppez le Control


    bon code...........

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 107
    Points : 66
    Points
    66
    Par défaut
    Effectivement, en supprimant le control et en le redroppant sur la Form1 depuis la boite outil, ça marche...
    Mais ça casse tous le design et il faut le refaire, j'image que pour 1 control ça va, mais si ils en a plusieurs, à chaque modif, ça prend la tête, c'est galère !
    Non, ce que je cherche c'est un build automatique sur le design de la Form sans justement redroppant le control, mais je ne sais pas si c'est faisable ?

  12. #12
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    alors on va la faire simple

    Normalement, si dans une solution, tu as 2 projets, 1 qui contient des controles et l'autre, ton programme qui les utilise, si tu veux utiliser
    les controles dans le programme, voici la démarche à suivre :

    1 - Dans le designer, tu fais un Drag & Drop de ton controle utilisateur (qui s'affiche normalement dans la boite à outil)

    Cette action va AUTOMATIQUEMENT ajouter une référence dans ton projet vers le projet des librairies (c'est ce que fait automatiquement Visual studio quand on ajoute
    un controle d'une autre librairie et qui est visible dans la toolbox).

    Une fois que tu as fait celà, pas besoin de faire du Drag & Drop à nouveau, tout fonctionnera
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  13. #13
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 107
    Points : 66
    Points
    66
    Par défaut
    0-Au début:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ->ClassLibrary2
    	->Référence
    		...
            ->Control.cs
    ->Developpez
    	->Référence
    		...
            ->Form1.cs
    1-puis j'ajoute une référence de la dll de la librairie dans référence de classlibrary2, j'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ->ClassLibrary2
    	->Référence
    		ClassLibrary2
    		...
            ->Control.cs
    ->Developpez
    	->Référence
    		...
            ->Form1.cs
    3-là, le control de la librairie apparait dans la boite à outils.
    4- Je drap-drop le control pour le mettre sur la Form1, j'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ->ClassLibrary2
    	->Référence
    		ClassLibrary2
    		...
            ->Control.cs
    ->Developpez
    	->Référence
    		ClassLibrary2
    		...
            ->Form1.cs
    5-Je remodifie la couleur dans control.cs de la librairie
    6-Je Rebuild la solution
    7-Je réaffiche Form1.cs[Design] ->aucune modification de couleurs !
    8- A l'exécution aucune modification de couleur !

    Est-je fais la bonne manipulation?
    Sinon, est-ce que cela ne serait pas dût à la version de VS, j'utilise VS Community 2015 et pas une version professionnelle ?

  14. #14
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 107
    Points : 66
    Points
    66
    Par défaut
    Apparement le seul moyen est de faires des drap&drop des control pour réactualiser le designer!

  15. #15
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Citation Envoyé par Helices Voir le message
    Apparement le seul moyen est de faires des drap&drop des control pour réactualiser le designer!
    Tu peux également utiliser les métadonnées suivantes sur tes propriétés d'affichage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            [DefaultValue(Color.Red)]
            [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    Elles permettent de ne pas polluer le designer avec ce genre d'initialisation

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 19/11/2008, 10h06
  2. [RegEx] Je recherche une chaîne qui ne contient pas une certaine chaîne
    Par johann51 dans le forum Langage
    Réponses: 5
    Dernier message: 19/03/2008, 17h42
  3. Réponses: 3
    Dernier message: 20/02/2007, 16h48
  4. un module qui ne contient pas une fonction qu'il contient :?
    Par duplo dans le forum Général Python
    Réponses: 12
    Dernier message: 15/08/2006, 20h30
  5. Div qui n'a pas une hauteur minimum
    Par Pumpkins dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 26/09/2005, 10h20

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