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 :

VS 2010 Le designer indique des erreurs qui ne le sont pas


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2009
    Messages : 128
    Par défaut VS 2010 Le designer indique des erreurs qui ne le sont pas
    Bonjour,

    Je viens à vous car j'ai un problème avec C# sous Visual Studio. Le Designer des Winforms m'affiche une fenêtre d'erreurs et m'indique "Pour éviter tout risque de perte de données avant le chargement du concepteur, les erreurs suivantes doivent être résolues".

    Quand je regarde ces erreurs dont il parle, en fait ce ne sont pas des erreurs. Il m'indique que les objets graphiques de la winform n'ont pas été déclarés ou n'ont pas été assignés. Alors que quand je regarde dans le fichier myForm.Designer.cs, elles sont bien déclarées et assignées dans la méthode InitializeComponent().

    Quelqu'un aurait il rencontré ce problème avant et aurait une idée sur comment le résoudre?

    Merci d'avance.

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2009
    Messages : 128
    Par défaut
    Je cerne mieux le problème. J'ai réussi à remonter la fenêtre contrôle utilisateur d'où commence à priori le problème.

    Il m'affiche:
    Type 'System.Collections.Generic.List' introuvable. Vérifiez l'assembly qui ...

    C'est ce que j'ai fait, et c'est vrai, j'ai pas le type List dans ma DLL system!!

    Dans tous les forums d'aide et tutoriels ils disent que le type List est dans System.Collections.Generic, mais pas chez moi :'(

    Je dois absolument utiliser le type List, j'ai pas le choix. Quelqu'un aurait il une explication svp? Quelq'un a-t-il rencontré le même problème?

  3. #3
    Membre Expert Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Par défaut
    Bonjour,
    As-tu fais
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    using System.Collections.Generic;
    ? Quelle version du .net framework utilises-tu?

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2009
    Messages : 128
    Par défaut
    oui bien sûr, j'ai fait le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     using System.Collections.Generic;
    J'utilise le framework 4.5.50709 SP1

  5. #5
    Membre Expert Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Par défaut
    Pourrais-tu montrer le code qui bug? As-tu essayé avec un nouveau projet pour tester si l'utilisation de List ne marche toujours pas?

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2009
    Messages : 128
    Par défaut
    Ce n'est pas le code qui bug, c'est le designer qui bug. le code s'exécute même normalement.
    Qu'est ce qui m'embête alors vous allez demander? C'est d'abord, l'existence d'erreurs inexpliquées, je ne peux pas livrer quelque chose comme ça. Ensuite, j'ai à modifier l'interface, et c'est quand même beaucoup plus simple via le designer.

    Je résume toute la situation:

    J'ai une fenêtre qui contient une PictureBox. Dans cette fenêtre j'insère des UserControl, qui sont des éléments de dessin. Le nombre de ces éléments est inconnu à l'avance, d'où la nécessité d'une liste.

    Dans ma classe principale, j'ai (en autres bien sûr):
    (je suis en train de développer un éditeur graphique de grafcet)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    using System.Collections.Generic;
     
    public System.Collections.Generic.List<Grafcet.ctrGrafcetSymbol> lCtrGrafcetElement;
     
    lCtrGrafcetElement = new System.Collections.Generic.List<ctrGrafcetSymbol>();
     
    ctrGrafcetSymbol grafcetElement = new ctrGrafcetSymbol();
    lCtrGrafcetElement.Add(grafcetElement);
    Le code compile, s'exécute, pas de problème (à priori), mais dans le designer de la fenêtre, j'ai cette erreur qui me fait peur (voir image jointe)

    C'est pas la première fois que j'utilise List, je sais comment ça marche. Mais c'est la première fois que je l'utilise dans ce contexte (liste d'objets graphiques à insérer)

    Et là je suis à sec, je suis face à cette erreur, que je peux pas laisser bien sûr, et je ne sais absolument pas comment la résoudre.
    Images attachées Images attachées  

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Il faut savoir que le designer en winform a aussi du code c# généré. Dans ta winform, tout ce qui concerne le corps de "InitializeComponent" est mis dans un fichier qui fini par ".designer.cs".

    D'autre part, tout le code qui se trouve dans ton Usercontrol est exécuté au moment du design dans le "InitializeComponent".

    Il faudrait que l'on dispose des codes du "InitializeComponent" du formulaire principal ainsi que de tout le code de ton UserControl.

    ...mais au fait, tes UserControls, tu les ajoutes après le "InitializeComponent" ou alors avec le designer de ton formulaire? Je n'ai pas très bien compris où tu as inséré le code que tu nous as montré...

  8. #8
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2009
    Messages : 128
    Par défaut
    Bonjour,

    Merci pour ta réponse. Pour les UserControl, je les ajoute par programmation, après le "InitializeComponent".

    J'ai un événement Load, que j'appelle à chaque fois que je veux insérer un nouveau UserControl.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private void MatrixPanel_Load(object sender, EventArgs e)
    {
       for (int i=1; i< lCtrGrafcetElement[i].count-1;i++)
    pictureBox1.Controls.Add(this.lCtrGrafcetElement[i]);
    }

  9. #9
    Invité
    Invité(e)
    Par défaut
    Ce n'est pas encore très clair...
    L'événement "Load", Est-ce celui du formulaire? Du PictureBox?

    En plus si j'ai bien compris tu ajoutes ton UserControl dans les contrôles de ton composant PictureBox...

    Pourrais-tu montrer le contenu de la fonction "InitializeComponent" du formulaire qui pose problème? Tu le trouveras dans le fichier qui finit par ".designer.cs" comme je l'ai dit plus haut.

  10. #10
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2009
    Messages : 128
    Par défaut
    J'ai un formulaire, qui contient une pictureBox et qui contient une zone de choix de formes géométriques.
    Quand l'utilisateur choisit une forme géométrique, le dessin de cette forme se fait dans un UserControl indépendant que j'insère ensuite par dessus la PictureBox.

    Le Load je l'appelle de la PictureBox, quand je lui demande de charger, elle insère tous les UserControl que j'ai déjà dessiné.

    Sinon voici le InitializeComponent qui pose problème:
    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
     
            private void InitializeComponent()
            {
                this.pic = new System.Windows.Forms.PictureBox();
                this.zoomBar = new System.Windows.Forms.TrackBar();
                this.valeurZoom = new Telerik.WinControls.UI.RadLabel();
                lCtrGrafcetElement = new System.Collections.Generic.List<ctrGrafcetSymbol>();
                lCtrMacroElement = new System.Collections.Generic.List<ctrGrafcetSymbol>();
                ((System.ComponentModel.ISupportInitialize)(this.pic)).BeginInit();
                ((System.ComponentModel.ISupportInitialize)(this.zoomBar)).BeginInit();
                ((System.ComponentModel.ISupportInitialize)(this.valeurZoom)).BeginInit();
                this.SuspendLayout();
                // 
                // pic
                // 
                this.pic.Dock = System.Windows.Forms.DockStyle.Fill;
                this.pic.Location = new System.Drawing.Point(0, 0);
                this.pic.Name = "pic";
                this.pic.Size = new System.Drawing.Size(1175, 708);
                this.pic.TabIndex = 0;
                this.pic.TabStop = false;
                // 
                // zoomBar
                // 
                this.zoomBar.Cursor = System.Windows.Forms.Cursors.Hand;
                this.zoomBar.Location = new System.Drawing.Point(885, 16);
                this.zoomBar.Maximum = 25;
                this.zoomBar.Minimum = 1;
                this.zoomBar.Name = "zoomBar";
                this.zoomBar.Size = new System.Drawing.Size(269, 45);
                this.zoomBar.SmallChange = 10;
                this.zoomBar.TabIndex = 100;
                this.zoomBar.TickFrequency = 5;
                this.zoomBar.TickStyle = System.Windows.Forms.TickStyle.Both;
                this.zoomBar.Value = 1;
                this.zoomBar.Scroll += new System.EventHandler(this.zoomBar_Scroll);
                // 
                // valeurZoom
                // 
                this.valeurZoom.Location = new System.Drawing.Point(824, 28);
                this.valeurZoom.Name = "valeurZoom";
                this.valeurZoom.Size = new System.Drawing.Size(2, 2);
                this.valeurZoom.TabIndex = 101;
                // 
                // MatrixPanel
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.AutoScroll = true;
                this.Controls.Add(this.valeurZoom);
                this.Controls.Add(this.zoomBar);
                this.Controls.Add(this.pic);
                this.Name = "MatrixPanel";
                this.Size = new System.Drawing.Size(1175, 708);
                this.Load += new System.EventHandler(this.MatrixPanel_Load);
                ((System.ComponentModel.ISupportInitialize)(this.pic)).EndInit();
                ((System.ComponentModel.ISupportInitialize)(this.zoomBar)).EndInit();
                ((System.ComponentModel.ISupportInitialize)(this.valeurZoom)).EndInit();
                this.ResumeLayout(false);
                this.PerformLayout();
     
            }

  11. #11
    Invité
    Invité(e)
    Par défaut
    OK, je vois dans ton initializeComponent que tu as 2 membres "lCtrGrafcetElement" et "lCtrMacroElement". Ce sont soit des propriétés soit des champs.

    Si tu ne mets aucun attribut sur ces membres, le designer va tenter de les initialiser dans "InitializeComponent" et en plus, si ce sont des membres publiques, tu pourrais y accéder par designer si tu dérives la classe de ta fenêtre.

    Normalement, si les membres ne sont pas publiques, le designer ne va pas tenter de les initialiser.

    Donc pour résoudre ton problème, déclare ces membres en autre chose que "public". Mets-les en "private" de préférence, surtout s'il s'agit bien, comme je le pense, d'éléments concernant ta "cuisine interne".

    Si vraiment tu ne veux pas les passer en non publique, alors pour indiquer qu'un designer ne doit pas y avoir accès, met les attributs "Browsable(false)" au-dessus des déclarations des membres.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [Browsable(false)]
    public List<ctrGrafcetSymbol> lCtrGrafcetElement { get; set; }
    Cela devrait ne plus poser de problème après normalement...

  12. #12
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2009
    Messages : 128
    Par défaut
    Merci beaucoup

    c'est en effet moi qui ai mis ces 2 lignes là bas, il y a longtemps, et j'avoue je ne sais plus pourquoi j'ai fait ça.

    Tu as résolu mon problème franchement merci.

  13. #13
    Invité
    Invité(e)
    Par défaut
    OK, c cool

    Winform peut être assez prise de tête au niveau du design.

    Il faut toujours avoir en tête que le designer va tenter, à défaut d'indication d'attributs, d'initialiser tout membre publique d'un élément dérivant de "Form" ou "UserControl". A chaque fois qu'on ajoute des propriétés publiques, il faut toujours se demander si le designer a le droit d'y avoir accès ou pas. Il faut manipuler en cas de besoin les attributs "BrowsableAttribute" ou "DesignerSerializationVisibilityAttribute".

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

Discussions similaires

  1. [XL-2003] Des doublons qui n'en sont pas pour mDF doublons
    Par La Zélie dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/05/2009, 13h27
  2. Réponses: 12
    Dernier message: 11/04/2006, 18h36
  3. Réponses: 8
    Dernier message: 20/01/2006, 14h46
  4. Design de site, div qui ne s'alonge pas.
    Par Space Cowboy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 25/11/2005, 19h17
  5. Réponses: 15
    Dernier message: 22/07/2005, 10h49

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