Problème de type!

aurelien2723 Messages postés 181 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 26 janvier 2011 - 14 févr. 2008 à 14:47
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 15 févr. 2008 à 17:29
Bonjour,

j'ai une erreur folle en VB6.

J'ai une collection de label   (appelé "carreau")

Je veux passer un des labels de ma collection à une fonction , qui prend donc un label en argument.


Private Sub BoutonRAZ_Click()
    changerCase (Carreau(5))
End Sub

Public Function changerCase(tmp As Label)
    If tmp.Caption = "X" Then
        tmp.Caption = ""
    Else: tmp.Caption = "X"
    End If
End Function



A la compilation j'ai une erreur :

'erreur de type incompatible'  !!!

pourquoi donc? l'élement de ma collection est bien un label...
Carreau 5 existe bien

Merci de votre aide :)

4 réponses

NHenry Messages postés 15156 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 29 septembre 2024 159
14 févr. 2008 à 15:12
Bonjour

Et si tu changes :
Public Function changerCase(tmp As Label)
par :
Public Function changerCase(Byval tmp As Label)

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
aurelien2723 Messages postés 181 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 26 janvier 2011 1
14 févr. 2008 à 15:46
merci :)

Byval ou Byref, ca change rien ... :(

de plus je il me la faut par byRef parceque je la modifie.
0
NHenry Messages postés 15156 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 29 septembre 2024 159
14 févr. 2008 à 16:06
Bonjour

ByRef ou ByVal, quelle différence :
ByRef passe le paramètre par référence, celui-ci peut être modifié par la fonction/procédure.
ByVal passe le paramètre par valeur, toute modification du paramètre dans la fonction/procédure ne modifie pas la valeur chez l'appelant.

Détail à ce sujet, un entier, string ou structure (Type) est envoyé directement, tandis qu'un objet (catégorie dont fait partie le Label) le paramètre est en fait une pointeur, donc passer un objet par référence ou valeur c'est presque la même chose, à l'exception près que par référence, on peut changer l'objet pointé (d'un Label à un autre Label par exemple) et qu ce soit modifier chez l'appelant.

Donc, pour changer le Caption, que ce soit par référence ou par valeur, cela ne change strictement rien.

Voilà déjà pour commencer.

Ensuite :
De quel type est Carreau() (si c'est des contrôles indexés, pas la peine de répondre à cette question)?
As-tu essayer en remplaçant "As Label" par "As Control" ou par "As Object" ?

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
15 févr. 2008 à 17:29
salut

salut,
c'est à cause de tes parenthèses pour une fonction qui n'en est pas une
(même erreur en déclarant As Object, normal)

correction :
Private Sub BoutonRAZ_Click()
    changerCase Carreau(5)
End Sub

Public Sub changerCase(tmp As Label)
    tmp.Caption = IIf(tmp.Caption = "X", vbNullString, "X")
End Sub

++
PCPT  [AFCK]
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
Rejoignez-nous