none
Contrôles qui disparaissent. Contrôles qui n'apparaissent pas RRS feed

  • Question

  • Bonsoir,

    Je tombe sur une panne originale : j'ai créé certains contrôles (des Labels) Et ceux-ci n'apparaissent pas dans la forme correspondante (alors qu'ils ont la propriété visible = true.). Ils ont fini par apparaître après que j'ai passé en revue à l'éditeur de texte les différents fichiers .vb.

    Mieux :

    J'ai effacé ces contrôles en appuyant sur la touche Suppr après les avoir sélectionnés. Maintenant, ils provoquent tous une erreur annonçant qu'ils n'appartiennent pas à la forme... J'en perd mon visual latin... 

    Quelqu'un peut-il m'aider ?


    Pierre Allemand

    dimanche 1 avril 2012 22:03

Réponses

  • Bonjour Pierre,

    Ça arrive parfois quand on perturbe quelque chose, car vbNet est sensible, par exemple supprimer une ressource dont on fait appel dans le code, ou des actions de ce genre...

    Lors du lancement les fichiers de texte que tu cites (resx, vb...), ils conservent la ligne de l'objet mais ce dernier n'est pas trouvé et plante. Dans l'absolu il faudrait modifier le texte pour lui enlever ou lui rajouter ce qu'il veut, mais ce n'est pas toujours simple faute de connaître la façon d'ordonner et d'écrire tout ça.

    Pour ma part, quand parfois ça m'arrive, j'emploie les grands moyens, s'il n'y a pas trop d'objet je recrée un autre programme, sinon, je crée une autre form en copiant les objet de l'ancienne, puis je supprime l'ancienne form, ainsi son texte est à jour...

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    lundi 2 avril 2012 07:04
  • Je pense que vous avez trifouillé dans le ficher form.Designer.vb, et c'est mal ;-)

    Quand vous ajoutez une form dans un projet, en réalité, VS ajoute 2 fichiers :

    • form.vb qui doit contenir votre code, et votre code uniquement.
    • form.designer.vb contient du code généré automatiquement par Visual Studio.

    En réalité, c'est la même classe (vous verrez que la classe est marquée comme Partial, pour indiquer que son code est splitté en plusieurs fichiers) interprété à la volée par VS dans le mode Designer.

    Donc si il y a une erreur dans le code de l'un des 2 fichiers (surtout le constructeur), il plante.

    Donc modifier le code de form.Designer.vb peut s'avérer dangereux.

    Dans form.Designer.vb, vous avez une méthode Initialize (ou un truc comme ca) qui définie les différentes propriétés de vos contrôles. Par exemple si vous avez un label, il écrira :

    ' Label1
    Label1.Size = new Size(100,100)
    Label1.Text = "mon text"
    ....
    
    'Label2
    Label2.Size = new Size(120,50)
    Label2.Text = "coucou"
    ...
    Puis en bas (de mémoire) vous avez la déclaration des variables de ces contrôles :
    Dim Label1 as Label
    Dim Label2 as Label

    Donc à mon avis, vous avez encore du code dans Initialize qui fait référence à des variables qui ne sont plus présentes.

    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    lundi 2 avril 2012 07:32

Toutes les réponses

  • Bonjour Pierre,

    Ça arrive parfois quand on perturbe quelque chose, car vbNet est sensible, par exemple supprimer une ressource dont on fait appel dans le code, ou des actions de ce genre...

    Lors du lancement les fichiers de texte que tu cites (resx, vb...), ils conservent la ligne de l'objet mais ce dernier n'est pas trouvé et plante. Dans l'absolu il faudrait modifier le texte pour lui enlever ou lui rajouter ce qu'il veut, mais ce n'est pas toujours simple faute de connaître la façon d'ordonner et d'écrire tout ça.

    Pour ma part, quand parfois ça m'arrive, j'emploie les grands moyens, s'il n'y a pas trop d'objet je recrée un autre programme, sinon, je crée une autre form en copiant les objet de l'ancienne, puis je supprime l'ancienne form, ainsi son texte est à jour...

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    lundi 2 avril 2012 07:04
  • Bonjour,

    Est-il possible que vous puissiez nous expliquer comment reproduire le problème ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    lundi 2 avril 2012 07:20
    Modérateur
  • Je pense que vous avez trifouillé dans le ficher form.Designer.vb, et c'est mal ;-)

    Quand vous ajoutez une form dans un projet, en réalité, VS ajoute 2 fichiers :

    • form.vb qui doit contenir votre code, et votre code uniquement.
    • form.designer.vb contient du code généré automatiquement par Visual Studio.

    En réalité, c'est la même classe (vous verrez que la classe est marquée comme Partial, pour indiquer que son code est splitté en plusieurs fichiers) interprété à la volée par VS dans le mode Designer.

    Donc si il y a une erreur dans le code de l'un des 2 fichiers (surtout le constructeur), il plante.

    Donc modifier le code de form.Designer.vb peut s'avérer dangereux.

    Dans form.Designer.vb, vous avez une méthode Initialize (ou un truc comme ca) qui définie les différentes propriétés de vos contrôles. Par exemple si vous avez un label, il écrira :

    ' Label1
    Label1.Size = new Size(100,100)
    Label1.Text = "mon text"
    ....
    
    'Label2
    Label2.Size = new Size(120,50)
    Label2.Text = "coucou"
    ...
    Puis en bas (de mémoire) vous avez la déclaration des variables de ces contrôles :
    Dim Label1 as Label
    Dim Label2 as Label

    Donc à mon avis, vous avez encore du code dans Initialize qui fait référence à des variables qui ne sont plus présentes.

    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    lundi 2 avril 2012 07:32
  • J'ai effectivement trifouillé dans le fichier Form.Designer.vb... avant de me rendre compte que c'était interdit en toutes lettres...

    J'ai retrouvé mes petits en suivant les conseils de EhJoe en recopiant la version antérieure de ma forme principale que j'avais eu le soin de sauvegarder.

    Merci à tous.


    Pierre Allemand


    mardi 3 avril 2012 16:32