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

Windows Forms Discussion :

[VS2005] Design d'un form perdu lors de la génération


Sujet :

Windows Forms

  1. #1
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 947
    Points
    55 947
    Billets dans le blog
    131
    Par défaut [VS2005] Design d'un form perdu lors de la génération
    Salut.

    Je développe une petite appli en VB.NET via VS2005 avec des classes et contrôles perso.

    J'ouvre la solution:
    - f_principal est visible, tant pour le code que pour le design
    - Je génère la solution. Tout est ok
    - Je modifie le code d'une classe
    - Je génère à nouveau la solution
    => Plantage. Lorsque j'essaie de visualiser le design de f_principal, j'ai du code html à la place et des erreurs (un contrôle utilisateur qui ne serait pas déclaré...)

    [EDIT] Et apparemment, impossible de récupérer le formulaire en désign, et l'appli plante, bien entendu => je dois recommencer le formulaire. La productivité est donc archi nulle, bien évidemment.



    Je ne comprends absolument pas pourquoi ce truc se comporte ainsi.

    Qu'ai-je fait? Et surtout, que dois-je faire pour éviter cela? Je me vois mal faire des copies du dossier de développement avant chaque génération de la solution...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 192
    Points : 28 073
    Points
    28 073
    Par défaut
    - Je modifie le code d'une classe
    - Je génère à nouveau la solution
    => Plantage. Lorsque j'essaie de visualiser le design de f_principal, j'ai du code xml à la place et des erreurs (un contrôle utilisateur qui ne serait pas déclaré...)
    Alors, on va donc supposer que la classe que tu as modifiée est donc bien le contrôle utilisateur (ou fait parti du) qui n'est soit disant pas déclaré sur ta form.

    Si ton contrôle utilisateur est soit-disant pas déclaré c'est bien peut-être parce que celui-ci n'est pas compilé et donc n'existe pas.

    S'il n'est pas compilé, c'est peut-être bien parce que le code que tu as modifier dans ta classe génère une erreur de compilation.

    Normalement tu devrais avoir en bas de l'écran, un onglet qui s'appelle "Liste d'erreurs" qui te liste justement les erreurs dans ton code, et qui te donne, si ce n'est la solution, tout au moins un début de piste
    (accessible aussi par le menu Affichage/liste d'erreur)
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  3. #3
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 947
    Points
    55 947
    Billets dans le blog
    131
    Par défaut
    Merci de ta réponse.

    J'ai un formulaire principal

    Sur ce formulaire, j'ai placé un contrôle utilisateur. Ce contrôle utilisateur contient un seul treeview, et se connecte à une classe perso.
    Cette classe perso "cDossiers" crée une collection de "cDossier" et la met à disposition, notamment du contrôle perso pour alimenter le treeview.

    Avant que le problème ne surivenne, tout fonctionne bien. Je peux générer la solution et le programme s'exécute normalement (je peux afficher le formulaire principal, le contrôle utilisateur répond bien, se connecte bien aux données, me permet de les modifier => tout est ok).

    J'ajoute deux lignes à la classe "cDossiers" dans une procédure (une ligne pour ouvrir une connexion et une pour la fermer).
    J'enregistre le fichier
    Je génère la solution.
    Je n'ai pas d'erreurs, mais bien quelques avertissements, dont un qui dit
    Avertissement 4 La variable 'UcArbreDossiers1' n'est pas déclarée ou n'a jamais été assignée. D:\Données\PFI\_Outils\Développements\Dossiers VB.NET\Dossiers\Dossiers\f_Principal.Designer.vb 95 0
    Si j'essaie de repasser en mode design sur f_principal, je ne vois plus le formulaire et les contrôles placés dessus, mais uniquement une ligne html qui commence comme ceci
    <html><head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset...
    .

    Et à ce stade, je n'ai d'autre choix que de recommencer la création de mon formulaire... C'est très passionnant, comme technique de développement.

    Donc, je ne vois pas où je commets l'erreur, mais je suppose bien que j'en commets une..., et à part la re-création de mon formulaire, je n'ai pas de solution.

    De plus, évidemment, ma confiance en ce projet est ébranlée... => se peut-il qu'une solution soit corrompue et qu'il faille la recréer de toutes pièces (avec des copier-coller de portions de codes)? Si oui, quelles sont les précautions à prendre pour éviter ces corruptions?

    Voilà. J'espère avoir été plus clair.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 192
    Points : 28 073
    Points
    28 073
    Par défaut
    Avant d'aller trop loin et d'envisager de grandes solutions, laisse ton formulaire un instant de coté.

    Rajoute un autre formulaire rapidement à ton projet, ou te ne pose que ton contrôle perso, connecté de la même façon à ta classe perso. S'il se comporte de la même manière, ton problème vient bien de là.

    Essaye aussi de revenir en arrière dans les modifs de code que tu as pu faire dans ta classe, pour voir si ça corrige le problème.
    Si elle est dans un projet indépendant essaye de la compiler seule pour voir si elle se compile bien.

    Sur ton écran HS, peut-être peux-tu aussi essayer d'intervenir dans le fichier designer (c'est dans ce fichier qu'est enregistré l'architecture "graphique" de l'écran) pour soit supprimer la liaison avec ta classe ou au pire le contrôle utilisateur et pouvoir ainsi récupérer le reste de l'écran.
    le fichier designer n'est, par défaut, pas visible. Pour le voir il faut sélectionner l'option du menu "Projet/afficher tous les fichiers", il apparaitra alors comme sous fichier du fichier de l'écran
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 947
    Points
    55 947
    Billets dans le blog
    131
    Par défaut
    Merci de ton aide...

    Avec un nouveau formulaire => problème (mais sans perte du design du formulaire).

    Le problème semblait venir de ma classe perso, qui tentait d'ouvrir une connexion déjà ouverte. J'ai résolu le problème et mon nouveau formulaire fonctionne bien. Par contre, l'ancien formulaire semble perdu. J'ai accès au code mais le design me donne toujours la ligne html au lieu d'un visuel du form, et l'avertissement est toujours pareil...

    Est-ce possible que l'on n'ait pas "droit à l'erreur" et que VS plante un formulaire?

    [EDIT]
    Après quelques tests, je suis arrivé à ceci:
    Après avoir enlevé la ligne qui pose problème, j'ai enregistré les fichiers puis générer => pas de design du formulaire et à la place, j'ai la ligne html
    Je ferme VS, je rouvre, je génère et ... je récupère le formulaire...

    Bon, j'ai pas trop perdu, et surtout j'ai appris, grâce à toi.

    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 192
    Points : 28 073
    Points
    28 073
    Par défaut
    C'est possible effectivement, mais personnellement ça ne m'est arrivé qu'une seule fois de ne pas du tout réussir à récupérer le formulaire, mais c'était un projet converti de VB.Net2002 vers VB2005.

    Peut-être en dernier recours peux-tu essayer les commandes "Nettoyer la solution", puis "Régénérer la solution"
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  7. #7
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 947
    Points
    55 947
    Billets dans le blog
    131
    Par défaut
    J'avais essayé de "nettoyer", mais sans succès.

    Ce qui importe, au final, c'est que j'ai compris comment j'avais "des chances" de récupérer le formulaire.

    Ce que je comprends mal, c'est qu'une ligne de code dans un module de classe puisse planter un formulaire qui ne se sert de cette classe que de façon très indirecte, et simplement à la génération (même pas à l'exécution en debug).

    C'est ce qui me faisait dire que la solution était vérolée ou corrompue, mais je n'ai pas assez d'expérience du vb.net pour savoir si ce problème est fréquent ou récurrent.

    Quoi qu'il en soit, j'espère que la manip salvatrice que j'ai pigée grâce à toi fonctionnera encore si le problème devait survenir à nouveau, mais je t'avoue que je n'ai plus trop confiance en la stabilité de ce que j'ai pondu, à tort ou à raison...

    Bonne soirée à toi.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 192
    Points : 28 073
    Points
    28 073
    Par défaut
    Ce qu'il faut savoir, c'est que lorsque tu ouvre ou conçois un écran dans l'interface de VS, les contrôles que tu pose sur l'écran, sont, eux, exécutés comme lors d'un fonctionnement normal de ton application.

    Alors si le code d'un de ces contrôles le fait planter, il peut empêcher VS de pourvoir redessiner l'écran même en mode conception.

    Quand il s'agit de contrôle utilisateurs, il faut bien entendu d'abords corriger le code, puis recompiler le contrôle et ensuite recompiler l'application contenant l'écran. Mais il est parfois necessaire de faire un nettoyage de la solution avant compilation, car VS gardant en cache les modules compiler peut ne pas recompiler les modifications faites.

    Les cas échéant, on finit pas essayer d'éditer (prudemment) le fichier designer de l'écran pour supprimer toute trace du contrôle et ainsi pourvoir récupérer le reste de l'écran.
    Les traces se décomposent en général en 4 parties : au début, l'instanciation du contrôle, dans la suite du code, un certain nombres de lignes correspondant à l'initialisation des propriétés du contrôle, ensuite une ligne du style ???.Controls.Add(lecontrole) ajoutant l'instance du contrôle à la collection des contrôles de son conteneur, et enfin, généralement à la fin du fichier, la ligne de déclaration du l'instance du style Friend WithEvents ... :

    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
     
    Private Sub InitializeComponent()
      Me.Button1 = New System.Windows.Forms.Button
      ...........
      '
      'Button1
      '
      Me.Button1.Location = New System.Drawing.Point(450, 240)
      Me.Button1.Name = "Button1"
      .........
      Me.Controls.Add(Me.Button1)
      .........
    End Sub
     
    Friend WithEvents Button1 As System.Windows.Forms.Button
    Bien entendu si ce contrôle contient lui-aussi d'autres contrôles, il faudra aussi supprimer les autres contrôles.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

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

Discussions similaires

  1. Mise en forme perdue lors de l'impression du tableau
    Par jacko842 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 29/05/2012, 18h34
  2. Réponses: 0
    Dernier message: 21/05/2008, 08h16
  3. Réponses: 1
    Dernier message: 19/05/2008, 16h49
  4. Réponses: 1
    Dernier message: 17/10/2005, 10h34
  5. [vb.net] [design mode] le form n'apparait pas en mode design
    Par graphicsxp dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/08/2005, 13h10

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