PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2025 → Manipuler des champs en POO
Manipuler des champs en POO
Iniciado por ap17, fev., 06 2026 10:29 PM - 5 respostas
Membro registado
20 mensagems
Publicado em fevereiro, 06 2026 - 10:29 PM
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
Membro registado
4.343 mensagems
Publicado em fevereiro, 08 2026 - 12:39 PM
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
Mensagem modificada, fevereiro, 08 2026 - 12:45 PM
Membro registado
296 mensagems
Publicado em fevereiro, 09 2026 - 1:08 PM
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
Membro registado
20 mensagems
Publicado em fevereiro, 09 2026 - 2:28 PM
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
Membro registado
296 mensagems
Publicado em fevereiro, 09 2026 - 3:03 PM
Toujours un plaisir d'échanger

Bon dev ! :)

--
Maître de la POO
Membro registado
4.343 mensagems
Publicado em fevereiro, 10 2026 - 8:05 PM
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
Mensagem modificada, fevereiro, 10 2026 - 8:06 PM