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 et problème de sérialisation


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 53
    Par défaut Usercontrol et problème de sérialisation
    Bonjour!
    J'ai développé quelques UserControls simples comme un bouton ...
    Ce bouton fonctionne très bien tout seul sur un formulaire, que ce soit au designtime ou au runtime.
    Mon problème intervient lorsque je souhaite intégrer ce bouton perso au sein d'un autre UserControl (que ce soit un contrôle destiné à l'utilisateur ou à être utilisé par un PropertyEditor...).
    Lorsque je glisse mon bouton sur mon UserControl, tout se passe bien, que ce soit au designtime ou au runtime.
    Ensuite, je reviens sur quelques portions de codes dans ma lib (qui n'ont rien à voir avec le bouton ou le UserControl), je recompile, et si je reviens en mode design sur mon Userontrol, le bouton précédemment ajouté a disparu et à la recompilation, immanquablement, j'ai des soucis.
    Evidemment, si je remplace mon bouton par celui du framework, tout va bien.

    En retournant voir dans le designer du UserControl contenant mon bouton perso, je vois bien les déclarations des boutons, mais aucune instanciation ou réglage de propriété

    Je précise que lorsque j'utilise mon bouton simplement sur un formulaire, je n'ai aucun soucis, même en réouvrant mon projet ...etc...

    J'utilise VB Express 2008 qui ne peut créer que des bibliothèques de classes.J'ai toujours fait comme ça en y ajoutant mes usercontrols, y-aurait-il quelques considérations à prendre en compte dans cette configuration ?

    Ca fait déjà plusieurs fois que j'ai le même problème et dans des projets différents, mais je n'arrive pas à comprendre pourquoi mes UserControls ne peuvent accepter de contrôles persos.

    Quelqu'un a une idée ?

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    le design sur un form ou le design sur un usercontrol ca se passe de la même manière dans vs ... donc c'est plutot étrange

    il nous faudrait le code du usercontrol pour trouver le problème, car si sans propriétés il fonctionne c'est que l'ajout de code y est pour quelque chose

    sinon quand on créé un control ou un usercontrol il faut idéalement réfléchir à l'utilisation de quelques attributs

    system.componentmodel.browsable(false)
    permet de dire que la propriété n'est pas visible dans le propertygrid

    system.componentmodel.designerserializationvisiblity permet de définir si la propriété est enregistré dans le fichier designer ; visible = enregistré, hidden = non enregistré (et non visible dans le propGrid je crois), content = la valeur as object est complètement enregistré (pour un controle par exemple ca l'instancie dans le designer plutot que ne n'avoir qu'une référence vers une instance)

    certains autres peuvent surement être utiles comme defaultvalue ...

    en effet en mode design, le code .net est exécuté, toutes les propriétés sont lues et par défaut enregistrées, or certaines propriétés sont en général prévues pour n'être utilisé qu'à l'exécution, donc ces attributs permettent de définir le comportement
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 53
    Par défaut
    Bonjour Pol63 et merci de te pencher sur mon problème.

    Je connais effectivement l'utilisation de certains attributs pour mes propriétés, et je sais aussi à peu près quel portions de codes sont exécutées seulement au runtime, mais je commence à avoir un doute sur le fait que ça vienne de là.

    Je m'explique...
    Je me rends compte que ce bug ressemble beaucoup à un autre qui survient quand de temps en temps quand je recompile un peu trop vite un usercontrol.
    Parfois, quand je retourne sur mon formulaire en mode design juste après une recompilation, l'IDE a l'air de se mélanger un peu les pinceaux et les uSerControl disparaissent alors qu'ils sont encore bien déclarés et instanciés dans le designer. En principe, je re-recompile et tout rentre dans l'ordre, au pire je vire tout du designer et replace le contrôle en mode design.

    Le code étant un peu long, voici un lien ...
    Code du bouton

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    c'est déjà du code avancé
    et puis il me manque les classes Cr... qui sont sérialisés en content

    mais sinon une info qui est pas forcément connue, on peut débugger le mode design (utilisation des points d'arret, pas à pas etc...)
    ce qui te permettrait peut etre de savoir ce qui se passe si tu sais comment reproduire le bug

    pour ca il faut aller dans les propriétés d'un projet de ta solution / onglet débugger / choisir démarrer le programme externe
    mettre le chemin de devenv.exe (=vs, quelque part vers program files)
    ensuite démarrer le projet, ce qui lancera un autre vs
    dans ce nouveau vs ouvrir la même solution
    les points d'arret du 1er vs fonctionnent alors
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut usercontrol,
    bonjour norris,
    voici un lien pour un outil .net qui ressemble au vieux ContainerTest Activex COM bidouille pour le .net qui permet de charger le projet test Form avec tout les controles dessus pour les tester en run-time sans aucune incidence sur le code du projet source.
    c'est le site "The Official Microsoft WPF and Windows Forms Site"(2Fwww.windowsforms.net) :
    http://www.google.fr/url?sa=t&source...g3L3-edjGr5HvA
    voici un exemple de code pour utiliser ce composant:

    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
     
    'a mettre dans le code du projet form Test
     
    Dim dialog As New DesignModeDialog()
    ' met le form Test en design mode.
    dialog.HostForm = Me
    ' Specifie  les proprietes qui sont seront visible dans le PropertyGrid de ce composant de test .
    dialog.PropertiesToDesign.Add("Items")
    dialog.PropertiesToDesign.Add("AutoSize")
    dialog.PropertiesToDesign.Add("Size")
    dialog.PropertiesToDesign.Add("Text")
    dialog.PropertiesToDesign.Add("Font")
    dialog.PropertiesToDesign.Add("Location")
    dialog.PropertiesToDesign.Add("ForeColor")
    dialog.PropertiesToDesign.Add("BackColor")
    dialog.PropertiesToDesign.Add("Anchor")
    dialog.PropertiesToDesign.Add("Dock")
    dialog.PropertiesToDesign.Add("ClientSize")
     
    ' affiche le form Test avec representation en design-time .
    designModeDialog1.ShowDialog()
    Le plus amusant de ce testcontainer .net est qu'il permet de tester les proprietes mais meme de dragger les controles testes,resize et meme remove virtuels bien sur.
    Il y a aussi une chose qui m'intrigue dans ta question ,le userBouton en question est -il dans un projet source ou bien tu as reference la dll pour de bon.
    Parce que s'il est dans un autre projet il faut le supprimer à chaque fois et le dropper car il est recompile,ce que je fais toujours etant echaude.
    Concernant le PropertyGrid ,il doit avoir des problemes à se reinitialiser si le controle est recompile à chaque fois.
    bon code...

Discussions similaires

  1. [Tableaux] Problème de sérialisation
    Par Langly dans le forum Langage
    Réponses: 1
    Dernier message: 29/12/2006, 20h22
  2. [Débutant] Problème de sérialisation collection
    Par Michel Hubert dans le forum VC++ .NET
    Réponses: 1
    Dernier message: 21/12/2006, 15h17
  3. problème de sérialisation
    Par yoyomc dans le forum Langage
    Réponses: 5
    Dernier message: 17/12/2006, 23h02
  4. Réponses: 4
    Dernier message: 12/12/2006, 10h22
  5. Problème de sérialisation
    Par CheryBen dans le forum Entrée/Sortie
    Réponses: 18
    Dernier message: 15/09/2005, 11h55

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