PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Windev/Classe/Erreur : Code erreur 0 lorsque j'affecte une valeur à la propriété de ma classe
Windev/Classe/Erreur : Code erreur 0 lorsque j'affecte une valeur à la propriété de ma classe
Débuté par OLI, 31 aoû. 2023 09:47 - 18 réponses
Membre enregistré
10 messages
Posté le 31 août 2023 - 09:47
Bonjour,
je tente de faire de la POO avec Windev, je débute donc, j'espère ne pas vous déranger pour une bêtise, si c'est le cas veuillez m'en excuser d'avance ;)
J'ai créé une classe : cContact :
cContact est une Classe
ms_Clé_Contact est une chaîne

Procedure PUBLIQUE Clé_Contact ():chaîne
RENVOYER ms_Clé_Contact

Procedure PUBLIQUE Clé_Contact (Valeur)
ms_Clé_Contact = Valeur


Dans mon projet, j'ai créé une fenêtre de test avec une zone de saisie (SAI_Test) et un bouton (BTN_Sauver), lorsque je clique sur le bouton :

clMonContact est un cContact
clMonContact.Clé_Contact = SAI_Test

je reçois le message suivant;(, pourriez-vous me dire pourquoi et surtout comment corriger ? Merci d'avance ;)



Membre enregistré
91 messages
Posté le 31 août 2023 - 10:43
bonjour

j'aurais ecrit :

clMonContact.Clé_Contact(SAI_Test)
Membre enregistré
4 182 messages
Posté le 31 août 2023 - 10:58
Bonjour,
La manière dont tu décrit ta classe est incorrecte, il manque le FIN.
Il faut écrire :
CContact est une Classe
PRIVÉ
m_saCléContact est chaîne
FIN


Note : Il est préférable, selon l'utilisation, de déclarer tes membres au minimum en PROTEGE.

@Eric, la syntaxe d'affectation est correcte. Nous sommes dans le cas d'un setter (propriété en écriture)

--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
8 messages
Posté le 31 août 2023 - 18:43
Bonjour

Eventuellement faites comme moi, prenez ce cours : https://coursdinfo-video.teachizy.fr/formations/starter-windev-poo-les-classes
Il est bien fait et pas cher.

Cordialement
Jean-Claude FLAJOULOT
Membre enregistré
10 messages
Posté le 31 août 2023 - 21:19
Bonsoir, merci pour votre réponse, c'est bien ce que j'ai fait, désolé j'avaisi oublié d'écrire le "fin" dans mon annonce, mais il était bien là, j'ai ajouté le mot Protégé comme indiqué mais cela ne change rien :-(
Et maintenant, je n'arrive même plus à exécuter, il m'affiche :
"La propriété Clé_Contact de la classe cContact n'est pas globale, elle ne peut pas être appelée à partir d'une méthode globale !
Alors qu'elle est déclarée PUBLIQUE !?
Dans ma classe, il y a ceci :
cContact est une Classe
PROTÉGÉ
ms_Clé_Contact est une chaîne
FIN
PROCÉDURE Constructeur()

PROCÉDURE PUBLIQUE Clé_Contact():chaîne
RENVOYER ms_Clé_Contact

PROCÉDURE PUBLIQUE Clé_Contact(Valeur)
ms_Clé_Contact = Valeur

PROCÉDURE Destructeur()

Dans mon code ceci :

clContact est un cContact
cContact.Clé_Contact = "TEST"
Membre enregistré
1 638 messages
Posté le 01 septembre 2023 - 09:35
Hello

Possible d'avoir des captures d'écran du code plutôt ?
Code de la classe et de ses méthode,
Code qui qui génère l'erreur

Ca doit pas être grand chose.
Message modifié, 01 septembre 2023 - 09:35
Membre enregistré
287 messages
Posté le 01 septembre 2023 - 10:44
Un screenshot de ta classe résoudrait tous tes soucis :D

--
#DKR
Membre enregistré
291 messages
Posté le 01 septembre 2023 - 11:01
Il serait peut-être utile de commencer par suivre le guide d'auto-formation proposé par PC-Soft ...
;-)
Membre enregistré
10 messages
Posté le 01 septembre 2023 - 16:51
@Gemini1961, c'est fait ;-)
Membre enregistré
10 messages
Posté le 01 septembre 2023 - 16:54
Voici le code la classe


Membre enregistré
291 messages
Posté le 01 septembre 2023 - 17:35
@OLI

Votre Code :
clContact est un cContact
cContact.Clé_Contact = "TEST"

L'erreur est sur la dernière instruction :-)

Sauf erreur de ma part j'aurais tendance à écrire
clContact.Clé_Contact = "TEST" et non pas cContact.Clé_Contact = "TEST"

Bien Cordialement
Membre enregistré
287 messages
Posté le 01 septembre 2023 - 17:43
Ah bah voila ! là c'est plus simple

Regarde le nom de ta propriété, elle s'appelle Clé_contact, ton membre protégé s'appelle ms_Clé_Contact. Ta propriété doit avoir le même nom que celui de ton membre sinon ça ne marche pas
Renomme ta propriété en ms_Clé_Contact et le tour est joué

--
#DKR
Membre enregistré
4 182 messages
Posté le 01 septembre 2023 - 18:16
404 ERROR a écrit :
Ta propriété doit avoir le même nom que celui de ton membre sinon ça ne marche pas

FAUX.
Sous Windev la propriété concernant un membre peut avoir un nom quelconque.
D'ailleurs par défaut, Windev préfixe les propriétés avec "p_" et ça fonctionne sans problèmes.

--
Il y a peut être plus simple, mais, ça tourne
Message modifié, 01 septembre 2023 - 18:30
Membre enregistré
344 messages
Posté le 01 septembre 2023 - 19:32
Bonjour

J'ai lu vite fait.

Ce qui est sur :
- Pour appeler la propriété, il faut l'appeler à partir de l'instance de la classe, pas la classe elle même (sinon la propriété doit être globale)
- Globale et Publique ça n'a rien à voir (cf ci-dessus)
- On peut donner le nom qu'on veut à une propriété et heureusement

Pour test voici ma déclaration de la classe





Et l'appel des propriétés (dans un bouton pour mon test) :

clTest est CContact

clTest.CléContact = "zzzzzz"

Info(clTest.CléContact)


--
Pascal H. http://phapps.e-monsite.com
Message modifié, 01 septembre 2023 - 19:33
Posté le 15 septembre 2023 - 06:50
Merci à tous pour votre aide et vos propositions. Le problème est maintenant résolu :)
Membre enregistré
391 messages
Posté le 15 septembre 2023 - 15:33
Quelle était la solution ? Celle de Gemini1961 ? hpascal = OLI ??
Membre enregistré
4 182 messages
Posté le 15 septembre 2023 - 17:17
Pucpood a écrit :
Quelle était la solution ? Celle de Gemini1961 ? hpascal = OLI ??

C'était de l'humour. hpascal fait remarquer qu'OLI est mort au pluches avant de préciser quelle solution il avait adopté. C'est malheureusement de plus en plus courrant :
Je pleure, je prend, je m'éclipse

--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
344 messages
Posté le 16 septembre 2023 - 11:45
Voroltinquo a écrit :
Pucpood a écrit :
Quelle était la solution ? Celle de Gemini1961 ? hpascal = OLI ??

C'était de l'humour. hpascal fait remarquer qu'OLI est mort au pluches avant de préciser quelle solution il avait adopté. C'est malheureusement de plus en plus courrant :
Je pleure, je prend, je m'éclipse

--
Il y a peut être plus simple, mais, ça tourne


Non pas du tout, c'est bien OLI qui a répondu.
Il y a un mélange dans les messages !
Il feraient mieux de le revoir ce forum :-)
D'ailleurs je ne reçois plus les notifications par mail. Et vous ?

--
Pascal H. http://phapps.e-monsite.com
Message modifié, 16 septembre 2023 - 11:45
Membre enregistré
10 messages
Posté le 06 janvier 2025 - 07:43
Bonjour hpascal,

désolé de ne répondre que maintenant mais j'ai eu quelques soucis de santé ...
J'ai tout simplement recréer ma classe mais en prenant la précaution de créer mes membres avant et puis je n'ai plus eu aucun souci. Gardant ce problème en tête, j'ai migré de version et j'utilise depuis peu la version 2024, pour tester j'ai fait la même chose et j'ai eu le même souci ! Je ne comprends pas pourquoi ... mais peu m'importe, je sais comment contourner le problème.

Bonne journée

hpascal a écrit :
Voroltinquo a écrit :
Pucpood a écrit :
Quelle était la solution ? Celle de Gemini1961 ? hpascal = OLI ??

C'était de l'humour. hpascal fait remarquer qu'OLI est mort au pluches avant de préciser quelle solution il avait adopté. C'est malheureusement de plus en plus courrant :
Je pleure, je prend, je m'éclipse

--
Il y a peut être plus simple, mais, ça tourne

Non pas du tout, c'est bien OLI qui a répondu.
Il y a un mélange dans les messages !
Il feraient mieux de le revoir ce forum :-)
D'ailleurs je ne reçois plus les notifications par mail. Et vous ?

--
Pascal H. http://phapps.e-monsite.com