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 :

[UserControl] Error lors de l'ajout dans un projet


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut [UserControl] Error lors de l'ajout dans un projet
    Bonjour,

    J'ai créé un usercontrol qui fonctionne très bien dans son projet.

    Par contre, lorsque je tente de l'ajouter dans un autre projet pour l'utiliser et le tester, j'ai une erreur qui m'est totalement incompréhensible lors de l'ajout du contrôle sur la winform en mode design...

    Est-ce que ce message incompréhensible pour moi parlerait à certains d'entre vous ?
    Images attachées Images attachées  

  2. #2
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Je pense que ta property Source dérange le Designer car il ne peut pas l'initialiser ...

    Tu peux rajouter ça au dessus de ta property Source dans ta class d'UC :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     <System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Hidden)> _
            <System.ComponentModel.Browsable(False)> _
    Ca permettra de la masquer à ton Designer.

  3. #3
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Je n'ai pas de propriété Source ^^.

    J'ai par contre une classe Source et une propriété DataSourcede type List(Of Source)Mais sinon, elle veut dire quoi cette erreur ? J'ai bien compris qu'il me parlait de serialization mais je ne comprends pas pourquoi...

  4. #4
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Bon, j'ai changé un truc car j'avais un bug dans l'event paint et ça changé l'erreur vers RangeType.

    J'ai mis ton bout de code au dessus de cette propriété mais en mettant True pour Browsable histoire de voir la propriété dans le designer et ça passe pour le mode design

    Merci !

  5. #5
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Je ne suis pas un pro du Designer VS, mais à ce que j'ai compris il n'arrive pas à sérialiser du fait qu'il ne reconnaisse pas le typage de la property du control.

    J'avais rencontré ce problème avec un panel qui avait en property un Objet personne de type personne, quand je déposais le control, le Designer voulait instancier toutes les properties du control, et il plantait sur la property personne.

    Obligé d'indiquer que le Designer ne doit pas sérialiser cette property. Et pour le browsable oui tu as bien fait de l'enlever j'ai pas fait attention mais ça ne sert que dans mon cas ...


    EDIT : Je viens de relire ton message d'erreur. Du coup à la place de masquer au Designer pour ne pas qu'il tente de sérialiser, tu peux déclarer ta classe Source comme sérialisable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <SerializableAttribute()>
        Public Class Source
    Ainsi le Designer pourra la sérialiser et il nous embêtera plus.

    Pas testé, mais ça ne coûte rien d'essayer et ce serait peut-être plus propre que de masquer.

  6. #6
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Citation Envoyé par _Ez3kiel Voir le message
    Je ne suis pas un pro du Designer VS, mais à ce que j'ai compris il n'arrive pas à sérialiser du fait qu'il ne reconnaisse pas le typage de la property du control.

    J'avais rencontré ce problème avec un panel qui avait en property un Objet personne de type personne, quand je déposais le control, le Designer voulait instancier toutes les properties du control, et il plantait sur la property personne.

    Obligé d'indiquer que le Designer ne doit pas sérialiser cette property. Et pour le browsable oui tu as bien fait de l'enlever j'ai pas fait attention mais ça ne sert que dans mon cas ...


    EDIT : Je viens de relire ton message d'erreur. Du coup à la place de masquer au Designer pour ne pas qu'il tente de sérialiser, tu peux déclarer ta classe Source comme sérialisable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <SerializableAttribute()>
        Public Class Source
    Ainsi le Designer pourra la sérialiser et il nous embêtera plus.

    Pas testé, mais ça ne coûte rien d'essayer et ce serait peut-être plus propre que de masquer.
    Par curiosité, je viens de tester et ça ne "marche" pas.
    VS me souligne la ligne en disant :
    Attribute 'SerializableAttribute' cannot be applied to 'XXXXXX' because the attribute is not valid on this declaration type.
    Sinon, une petite question quand même...
    Je suis en train d'insérer de la doc dans mon contrôle pour chaque propriété et méthode publique et je n'y arrive pas pour celles où il y a un ou plusieurs attributs... Faut les mettre où les triples quotes qui génèrent le bloc de documentation ?

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,
    Citation Envoyé par Kropernic Voir le message
    Bonjour,

    J'ai créé un usercontrol qui fonctionne très bien dans son projet.

    Par contre, lorsque je tente de l'ajouter dans un autre projet pour l'utiliser et le tester, j'ai une erreur qui m'est totalement incompréhensible lors de l'ajout du contrôle sur la winform en mode design...

    Est-ce que ce message incompréhensible pour moi parlerait à certains d'entre vous ?
    OhMonBato avait eu le même problème.
    Normalement en marquant la classe
    cela devrait fonctionner. (cet attribut résolvant le problème d'OhMonBato)

    Note : Perso j'avais eu un souci (dans les tests que j'avais fait pour le problème indiqué dans le lien) car l'absence de cet attribut avait à un moment bloqué mon design (je ne sais pas pourquoi) et j'avais modifier directement dans le .Designer.vb pour débloquer et accéder, il s'en était suivi une pagaille monstre.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  8. #8
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Ah, sur la classe !

    J'avais déjà essayé de taguer la propriété mais pas la classe. Évidemment, sur la propriété, VS râlait.

    Sur la classe, il ne râle pas mais cela ne résout toujours pas mon problème...

  9. #9
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Voilà, j'ai résolu mon problème et également le problème initiale de manière plus appropriée.

    Pour résumé :

    1° le problème initial :
    il fallait déclarer la classe comme étant sérializable à l'aide de l'attribut <Serializable()>
    2° le nouveau problème :
    il fallait ajout l'attribut <System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Content)> à la propriété que nous manipulions en mode design et dont nous voulons conserver les données au runtime.

  10. #10
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Du coup je viens de relire ce que j'ai proposé pour rendre sérialisable, et je me suis trompé, j'ai dit <SerializableAttribute()> en copiant mon code, mais j'avais en tête de rendre la classe sérialisable, donc <Serializable()> ...

    Du coup, maintenant que ta classe est déclarée comme sérialisable, on peut probablement retirer les 2 balises :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Hidden)> _
            <System.ComponentModel.Browsable(True)> _
    Pour laisser la main au designer sur la property.

    (Désolé je n'avais pas compris que tu souhaitais pouvoir modifier ta liste depuis le Designer, donc j'ai repris un cas personnel où je masque volontairement une property d'un control perso qui n'a rien à faire dans le Designer ...)


    EDIT: Du coup je suis encore trop long à écrire.

  11. #11
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Citation Envoyé par _Ez3kiel Voir le message
    Du coup je viens de relire ce que j'ai proposé pour rendre sérialisable, et je me suis trompé, j'ai dit <SerializableAttribute()> en copiant mon code, mais j'avais en tête de rendre la classe sérialisable, donc <Serializable()> ...

    Du coup, maintenant que ta classe est déclarée comme sérialisable, on peut probablement retirer les 2 balises :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Hidden)> _
            <System.ComponentModel.Browsable(True)> _
    Pour laisser la main au designer sur la property.

    (Désolé je n'avais pas compris que tu souhaitais pouvoir modifier ta liste depuis le Designer, donc j'ai repris un cas personnel où je masque volontairement une property d'un control perso qui n'a rien à faire dans le Designer ...)


    EDIT: Du coup je suis encore trop long à écrire.
    Pas de souci. J'avais bien enlevé déjà les deux balises que tu m'avais suggéré précédemment. J'aurai appris comment donner des consignes au designer avec ça

  12. #12
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Ces balises sont plutôt utiles, n'hésite pas à fouiner l'intellisense, y'en a des plutôt pratiques, d'autres facultatives mais qui aident un peu, tu peux pousser le développement d'usercontrols à la perfection avec.

    Par exemple celle-ci te permet de définir un texte pour décrire l'utilité ta property lorsque tu la surlignes en [Design]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <System.ComponentModel.Description("Permet de placer les panneaux en mode Consultation ou en mode Modification")> _
            Public Property mode As modeAffichage [...]
    Voir pièce jointe
    Images attachées Images attachées  

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

Discussions similaires

  1. Exécuter script lors de l'ajout dans un dossier
    Par Zandes dans le forum Windows
    Réponses: 2
    Dernier message: 29/09/2009, 11h09
  2. java.lang.StackOverflowError lors de l'ajout dans une ArrayList
    Par alys56 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 02/04/2008, 18h54
  3. Erreur lors de l'ajout dans une table
    Par k_boy dans le forum Bases de données
    Réponses: 14
    Dernier message: 31/03/2008, 15h05
  4. Réponses: 4
    Dernier message: 31/08/2006, 13h44
  5. [LG]Runtime Error lors d'une recherche dans un fichier
    Par Fraynor dans le forum Langage
    Réponses: 2
    Dernier message: 15/03/2005, 22h51

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