|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
| 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 RTFMMessage 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()
Procedure Constructeur(saSai est chaîne,saBtn est chaîne)
:m_saNomBtn=saBtn :m_saNomSaisie=saSai
Procedure PUBLIQUE NomSaisie() : chaîne
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()
Procedure Constructeur(saNomCellule est chaîne, saSaisie est chaîne, saBouton est chaîne) :m_saNomCellule=saNomCellule :m_clContenu=allouer un CContenuCellule(saSaisie,saBouton)
FONCTION PUBLIQUE NomSaisie() : chaîne
RENVOYER :m_clContenu:NomSaisie
Utilisation :
clMaCellule est CCellule saNomSaisie est chaîne
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 RTFMMessage modifié, 10 février 2026 - 20:06 |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|