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 :

Cours pour comprendre "Because they do not have a compatible signature."


Sujet :

VB.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut Cours pour comprendre "Because they do not have a compatible signature."
    Bonjour,

    Je rencontre encore cette erreur
    Because they do not have a compatible signature.
    Et je ne sais toujours pas la gérer.

    Est ce que vous pouvez m'indiquez un lien vers un cours (J'ai cherché dans celui de Ph.Lasserre, mais sans succs) qui serait assez clair pour que je puisse comprendre ceci une bonne fois pour toute.

    Merci d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 181
    Points : 4 495
    Points
    4 495
    Par défaut
    c'est parce que tu mets des pommes avec des poires

  3. #3
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Exactement, le cas produit quand la méthode attend un entier et que tu passes un string par exemple ou qu'elle a trois paramètres et que tu n'en passes que deux.

  4. #4
    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 753
    Points
    39 753
    Par défaut
    C'est quand tu essaies de t'abonner à un évènement avec une méthode qui n'a pas les bons types de paramètres et/ou type de retour.

    Par exemple, l'évènement Click en Windows Forms est défini comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Event Click As EventHandler
    Et le delegate EventHandler, qui définit la signature de l'évènement, est défini comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Delegate Sub EventHandler (sender As Object, e As EventArgs)
    Il faut donc que ta méthode qui gère l'évènement ait la même forme, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Button1_Click(sender As Object, e As EventArgs)
        ...
    End Sub
    Tu ne peux pas ajouter de paramètres à cette méthode ou changer leur type, sinon ça ne correspond plus à la définition de l'évènement

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    J'ai bien compris que je tentais un truc incompatible, ce que je voudrais c'est apprendre à les rendres compatibles.

    Si cette methode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub PlotTireButton_Click(ByVal tire_LF As TireClass, ByVal tire_RF As TireClass, ByVal tire_LR As TireClass, ByVal tire_RR As TireClass)
    Si je lui met handles button.click j'ai l'erreur.

    Si je met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub PlotTireButton_Click(ByVal sender As Object, ByVal e As System.EventArgs, ByVal tire_LF As TireClass, ByVal tire_RF As TireClass, ByVal tire_LR As TireClass, ByVal tire_RR As TireClass) Handles PlotTireButton.Click
    J'ai aussi une erreur.

    Si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private Sub PlotTireButton_Click() Handles PlotTireButton.Click
            Call PlotAero_button_Click()
        End Sub
     
        Private Sub PlotTireButton_Click(ByVal tire_LF As TireClass, ByVal tire_RF As TireClass, ByVal tire_LR As TireClass, ByVal tire_RR As TireClass)
    Call PlotAero_button_Click() me reclame sender as object et e as system.EventArgs....

    Je suppose que sender est le bouton, mais e....comment saurais-je?

  6. #6
    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 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Gualino Voir le message
    J'ai bien compris que je tentais un truc incompatible, ce que je voudrais c'est apprendre à les rendres compatibles.
    Bah tu peux pas... l'évènement est prédéfini, tu peux pas le modifier. Vu que c'est pas toi qui appelles explicitement la méthode PlotTireButton_Click, comment est-ce que VB saurait quelles valeurs il faut lui passer pour les paramètres tire_LF, tire_RF etc ?

    Quel est le but de ce que tu essaies de faire au juste ?

    Citation Envoyé par Gualino Voir le message
    Je suppose que sender est le bouton, mais e....comment saurais-je?
    sender est le contrôle qui déclenche l'évènement, donc effectivement c'est le bouton en l'occurrence. e représente les données associées à l'évènement, mais pour l'évènement Click il n'y a pas de données associées, donc en fait ça ne sert pas à grand chose (le paramètre existe simplement pour rester cohérent avec le pattern général des évènements)

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    En fait dans le cas présent mes instances tires étaient visibles, et les arguments as TireClass pas indispensable.

    Mais n'empêche autre exemple:

    J'ai un truc comme çà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub YMDChart_GetToolTipText(ByVal sender As Object, ByVal e As System.Windows.Forms.DataVisualization.Charting.ToolTipEventArgs) Handles YMDChart.GetToolTipText
    Pour en arrivé là, j'ai simplement fait un copier/coller depuis un code trouvé sur le web. Comment aurais-je pu savoir qu'il fallait :
    ByVal e As System.Windows.Forms.DataVisualization.Charting.ToolTipEventArgs
    ?

  8. #8
    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 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Gualino Voir le message
    Pour en arrivé là, j'ai simplement fait un copier/coller depuis un code trouvé sur le web. Comment aurais-je pu savoir qu'il fallait :
    Bah en regardant la doc... tu n'es évidemment pas obligé de tout connaitre par coeur

    L'évènement est défini comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Event GetToolTipText As EventHandler(Of ToolTipEventArgs)
    EventHandler(Of ToolTipEventArgs) indique le type du delegate de l'évènement. Pour voir sa signature, tu regardes la doc de EventHandler(Of TEventArgs) (je t'accorde qu'avec un lien ce serait plus pratique... pourtant y en avait un dans l'ancienne version de la MSDN ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Delegate Sub EventHandler(Of TEventArgs As EventArgs) (sender As Object, e As TEventArgs)
    comme EventHandler(Of TEventArgs) est un type générique, il faut remplacer TEventArgs par le type réel utilisé dans l'évènement, à savoir ToolTipEventArgs, ce qui donne comme signature pour ta méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub YMDChart_GetToolTipText(sender As Object, e As ToolTipEventArgs)
    (le ByVal est implicite...)

    Ca semble peut être un peu compliqué, mais il faut savoir que tous les évènements (du moins ceux qui sont codés proprement) ont une signature de la même forme, avec seulement le 2e paramètre qui change. Donc en fait il n'était pas absolument nécessaire d'aller voir la définition de EventHandler(Of TEventArgs) : une fois que tu sais comment ça marche, il suffit de voir le paramètre de type utilisé (ToolTipEventArgs).

    Mais de toutes façons, en général tu n'as pas besoin d'écrire ça à la main, le designer peut le faire pour toi (sélectionne le chart dans le designer, et sélectionne GetToolTipText dans la liste des évènements)

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Quand une méthode est déclenché par une événement de la manière:

    AddHandler evenement, AdressOf LaMethode

    Celle-ci doit avoir en argument sender as object et e a system.eventArgs...

    Dans ce cas seul l’événement ajouté dans AddHandler peut appeler la méthode et celle-ci ne peut pas recevoir plus d'argument que sender as object et e a system.eventArgs, c'est çà?

  10. #10
    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 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Gualino Voir le message
    Quand une méthode est déclenché par une événement de la manière:

    AddHandler evenement, AdressOf LaMethode

    Celle-ci doit avoir en argument sender as object et e a system.eventArgs...
    Ou un autre type d'EventArgs, selon l'évènement.

    Citation Envoyé par Gualino Voir le message
    Dans ce cas seul l’événement ajouté dans AddHandler peut appeler la méthode
    Rien n'empêche de l'appeler directement, mais en principe ça ne se fait pas trop parce que c'est pas très "propre"...

    Citation Envoyé par Gualino Voir le message
    et celle-ci ne peut pas recevoir plus d'argument que sender as object et e a system.eventArgs, c'est çà?
    C'est ça

  11. #11
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Rien n'empêche de l'appeler directement, mais en principe ça ne se fait pas trop parce que c'est pas très "propre"...
    Ba je n'y arrive pas...

    Si une méthode nécessite les rguments (sender as object , e as system.eventArg)

    Et que dans un sub je veux appeler cette méthode, quelle argument dois je mettre?

  12. #12
    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 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Gualino Voir le message
    Ba je n'y arrive pas...

    Si une méthode nécessite les rguments (sender as object , e as system.eventArg)

    Et que dans un sub je veux appeler cette méthode, quelle argument dois je mettre?
    Bah c'est un peu pour ça que normalement on l'appelle pas directement : on ne sait pas forcément quoi passer comme arguments...

    Normalement, le sender est le contrôle qui déclenche l'évènement, et e représente les données de l'évènement. Dans le cas de EventArgs, en fait ça ne contient rien, donc tu peux simplement passer EventArgs.Empty

  13. #13
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Merci j'essaierai

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

Discussions similaires

  1. Conseil livre pour comprendre scripts
    Par Filippo dans le forum Linux
    Réponses: 9
    Dernier message: 13/10/2005, 10h36
  2. Réponses: 4
    Dernier message: 28/07/2005, 16h22

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