PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Manipuler des champs en POO
Manipuler des champs en POO
Débuté par ap17, 06 fév. 2026 22:29 - 5 réponses
Membre enregistré
20 messages
Posté le 06 février 2026 - 22:29
Bonjour,
Question pour les pros de la POO avec Windev.

Imaginons 2 cellules dans une fenêtre, dans chaque cellule un bouton et une zone de saisie.
Le but (pédagogique bien sûr) est que quand on clique sur le bouton, la couleur de fond de la cellule devient la valeur saisie dans la zone de saisie.
Les deux cellules doivent fonctionner de la même façon donc on ne code qu'une fois (parce que le beoin réel est bien plus complet) en définissant une classe qu'on instancie en deux objets (cellule1 et cellule2). Dans un membre de la classe on a le nom de la cellule, qu'on passe en paramètre dans le constructeur et qui est donc dispo pour les traitements (puisque à priori il faut travailler par indrection de toute façon).

Question : quand on clique sur un bouton d'une cellule, comment peut-on récupérer la cellule à laquelle il appartient pour appeler la méthode du bon objet ?
la fonction ParentObjet, retourne le nom de la fenêtre (mais pas de la cellule).

Voilà, voilà, j'espère avoir été clair, merci à ceux qui prendront le temps d'essayer de comprendre le besoin ....encore plus s'ils apportent la solution !

--
Antoine
Membre enregistré
4 338 messages
Posté le 08 février 2026 - 12:39
Bonjour,
PCSoft n'a pas conçu ses champs pour qu'il soient facilement utilisable en POO.
Toutefois on peut tout simplement créer un modèle de champ.

1-On ne code qu'une fois (à la création du modèle)
2-Le bouton se rapporte à la cellule du champ issu du modèle
3-Le modèle est réutilisable à l'infini
...
4-On peut même surcharger un champ issu de ce modèle en cas de besoin spécifique.

--
Il y a peut être plus simple, mais, ça tourne
Quand tout a échoué, utilise l'option RTFM
Message modifié, 08 février 2026 - 12:45
Membre enregistré
295 messages
Posté le 09 février 2026 - 13:08
Je vois 2 façon de faire

La plus simple serait d'ecrire le nom du champ cellule dans la note du champ bouton

La deuxieme plus complexe serait de parcourrir tous les champs de la fenêtre avec EnumèreChamp, et lorsque tu tombes sur un champ cellule, mémorise le champ avant de commencer à parcourrir les champs dans la cellule
Une fois que tu tombes sur ton bouton par exemple tu n'auras plus qu'à récupérer le champ cellule mémorisé en amont

--
Maître de la POO
Membre enregistré
20 messages
Posté le 09 février 2026 - 14:28
Bonjour et merci à tous les deux d'avoir pris le temps de répondre.
L'idée de mémoriser le nom de la cellule dans la note du bouton me plait bien, il me semble que c'est plus facile à mettre en oeuvre et la plus "élégante". J'avais pensé à l'idée de noter le nom de la cellule quelque part mais je n'avais pas pensé à la note.
Merci encore

--
Antoine
Membre enregistré
295 messages
Posté le 09 février 2026 - 15:03
Toujours un plaisir d'échanger

Bon dev ! :)

--
Maître de la POO
Membre enregistré
4 338 messages
Posté le 10 février 2026 - 20:05
Une autre solution purement POO qui a l'avantage d'être portable est de Créer une classe CDescriptionCellule comportant une propriété qui renvoie le nom du champ de saisie.

CContenuCellule est une Classe
PRIVÉ
m_saNomSaisie est une chaîne
m_saNomBtn est chaîne
FIN

Procedure Constructeur() // 1° syntaxe

Procedure Constructeur(saSai est chaîne,saBtn est chaîne) //2° syntaxe

:m_saNomBtn=saBtn
:m_saNomSaisie=saSai

Procedure PUBLIQUE NomSaisie() : chaîne //Propriété

RENVOYER objet:m_saNomSaisie


La classe CCellule devient :
CCellule est une Classe
PRIVÉ
m_saNomCellule est une chaîne
m_clContenu est CContenuCellule
...
FIN

Procedure Constructeur() //1°Syntaxe

Procedure Constructeur(saNomCellule est chaîne, saSaisie est chaîne, saBouton est chaîne) //2° Syntaxe
:m_saNomCellule=saNomCellule
:m_clContenu=allouer un CContenuCellule(saSaisie,saBouton)

FONCTION PUBLIQUE NomSaisie() : chaîne //Propriété

RENVOYER :m_clContenu:NomSaisie


Utilisation :
clMaCellule est CCellule
saNomSaisie est chaîne //Nom du champ de saisie de la cellule utilisé pour les indirections

clMaCellule=allouer un CCellule("Cellule 1","SAI_Couleur1","BTN_AffecteCouleur1")

saNomSaisie=clMaCellule:NomSaisie


--
Il y a peut être plus simple, mais, ça tourne
Quand tout a échoué, utilise l'option RTFM
Message modifié, 10 février 2026 - 20:06