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 :

[VS 2008 - C#] Création de composants


Sujet :

Windows Forms

  1. #1
    tsp
    tsp est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 82
    Points : 54
    Points
    54
    Par défaut [VS 2008 - C#] Création de composants
    Bonjour,

    j'ai créé un composant visuel dérivant de System.Windows.Forms.Control. J'ai terminé mon composant, et l'ai testé en ajoutant un projet directement dans ma solution contenant ce composant. De ce fait, je trouve mon composant dans la boite à outils (tout en haut) et je peux ainsi le glisser sur ma form et le tester.

    La dernière étape qui me pose problème est l'utilisation de ce composant dans un autre projet indépendant de la solution de ce composant. Je cré donc une nouvelle solution, clique sur ma boite à outils pour ajouter la dll de mon composant et une fois sélectionné et ajouté, celui ci apparait grisé et ne peut donc pas être déposé sur ma form.

    Quelqu'un a t'il déjà rencontré ce problème et quelle est la solution ?

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Vérifie que le projet dans lequel tu testes ne cible pas une version du framework antérieure à celle de la DLL (par exemple, application en 2.0 et DLL en 3.5)

  3. #3
    tsp
    tsp est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 82
    Points : 54
    Points
    54
    Par défaut
    Mon application test ainsi que ma dll sont bien en framework 2.0 avec une plateforme Windows CE.

  4. #4
    tsp
    tsp est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 82
    Points : 54
    Points
    54
    Par défaut
    Après avoir refait petit à petit mon composant, le problème viendrait d'une ligne de code qui n'est pas "éxécutable", "interprétable" ou "compatible" avec windowsXP ? visual studio ? Je ne sais pas exactement ce qui se passe.

    Quoi qu'il en soit, si je met cette ligne en commentaire, le composant est accessible ; si je la décommente, il ne l'est plus.

    1) est il possible de voir ce qu'il se passe lorsque l'on ajoute une composant à la boite à outils ? comme un espèce de mode debug ?

    2) comment fait on pour mettre du code qui ne doit absolument pas être "éxécuté" ou "interprété" en mode design, dans un composant ?

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par tsp Voir le message
    Après avoir refait petit à petit mon composant, le problème viendrait d'une ligne de code qui n'est pas "éxécutable", "interprétable" ou "compatible" avec windowsXP ? visual studio ? Je ne sais pas exactement ce qui se passe.

    Quoi qu'il en soit, si je met cette ligne en commentaire, le composant est accessible ; si je la décommente, il ne l'est plus.
    Ce serait plus facile de t'aider si tu nous disais de quelle ligne de code il s'agit

    Citation Envoyé par tsp Voir le message
    1) est il possible de voir ce qu'il se passe lorsque l'on ajoute une composant à la boite à outils ? comme un espèce de mode debug ?
    Oui. Tu lances un 2e Visual Studio, tu vas dans Outils -> Attacher au processus, et tu sélectionnes le 1er Visual Studio (devenv.exe). Ensuite tu ouvres le fichier source de ton composant, et tu mets des breakpoints où tu veux

    Citation Envoyé par tsp Voir le message
    2) comment fait on pour mettre du code qui ne doit absolument pas être "éxécuté" ou "interprété" en mode design, dans un composant ?
    Tu peux utiliser la propriété DesignMode du composant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (!this.DesignMode)
    {
        ...
    }

  6. #6
    tsp
    tsp est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 82
    Points : 54
    Points
    54
    Par défaut
    Ce serait plus facile de t'aider si tu nous disais de quelle ligne de code il s'agit
    En fait mon composant est un composant pour SmartDevices et ma ligne est donc liée à une DLL de mon appareil. J'ai posé la même question dans la partie Windows Mobile du forum mais n'ayant aucune réponse, je me suis dis qu'en restant général je pourrais peut être avoir des pistes. Quoi qu'il en soit le bout de code qui me gêne est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.MyReader.ReadNotify -= this.MyEventHandler;
    sachant que MyReader est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private Symbol.Barcode.Reader MyReader = null;
    Tu peux utiliser la propriété DesignMode du composant : !this.DesignMode
    En fait je suis en compact framework est le this.DesignMode n'existe pas. Il existe uniquement un this.ISite.DesignMode mais je ne sais pas vraiment l'utiliser.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par tsp Voir le message
    En fait mon composant est un composant pour SmartDevices et ma ligne est donc liée à une DLL de mon appareil
    si tu ajoutes une référence à la DLL dans ton projet, ça devrait passer, non ?

    Citation Envoyé par tsp Voir le message
    En fait je suis en compact framework est le this.DesignMode n'existe pas. Il existe uniquement un this.ISite.DesignMode mais je ne sais pas vraiment l'utiliser.
    Ben de la même façon a priori... sauf que Site peut être null, donc il faut vérifier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (!(this.Site != null && this.Site.DesignMode))
    {
        ...
    }

  8. #8
    tsp
    tsp est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 82
    Points : 54
    Points
    54
    Par défaut
    Effectivement, ISite fonctionne très bien comme ça. Je suis arrivé à faire la distinction entre le mode Design et le mode Execution.

    Cependant, même entouré par ISite, le bout de code pose encore des problèmes et le composant reste grisé dans la boite à outils.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     if ((this.Site != null) && (this.Site.DesignMode))
    {
         if ((this.MyReader != null) && (this.MyReaderData != null))
         {
              this.MyReader.ReadNotify += this.MyEventHandler;
              ...
         }
    }
    si tu ajoutes une référence à la DLL dans ton projet, ça devrait passer, non ?
    Ma dll est bien référencée dans mon composant, d'ailleurs la génération de la DLL de mon composant ne pose aucun problème ; elle l'est également dans mon projet de test.

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par tsp Voir le message
    Cependant, même entouré par ISite, le bout de code pose encore des problèmes et le composant reste grisé dans la boite à outils.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ((this.Site != null) && (this.Site.DesignMode))
    Euh, elle serait pas inversée ta condition ? parce que là le code ne s'exécute que si tu es en mode design... alors qu'il faudrait que ce soit le contraire, non ?

    Enfin de toutes façons je ne pense pas que ça ait un rapport avec le fait que le contrôle soit indisponible dans la boite à outil. A priori, à ce stade aucun code du contrôle n'a été exécuté...

  10. #10
    tsp
    tsp est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 82
    Points : 54
    Points
    54
    Par défaut
    Effectivement, la condition était inversée mais effectivement également, cela ne change malheureusement rien.

Discussions similaires

  1. [Création de composant] Surcharge de OnMouseMove
    Par yoghisan dans le forum Composants VCL
    Réponses: 2
    Dernier message: 18/02/2004, 22h34
  2. [Création de composant] Composant exclu de ComponentCount
    Par yoghisan dans le forum Composants VCL
    Réponses: 6
    Dernier message: 18/02/2004, 12h45
  3. [Création de composant] Focus
    Par Pedro dans le forum Composants VCL
    Réponses: 4
    Dernier message: 16/02/2004, 13h57
  4. Ordre de création de composant
    Par bobby-b dans le forum Composants VCL
    Réponses: 4
    Dernier message: 15/09/2003, 19h05
  5. [Kylix] Création de composant
    Par glub dans le forum EDI
    Réponses: 2
    Dernier message: 08/01/2003, 16h58

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