|
| Problème avec EnumèreChamp et Ongets |
| Iniciado por Christophe PRADEL, 10,abr. 2019 12:34 - 1 respuesta |
| |
| | | |
|
| |
Miembro registrado 139 mensajes |
|
| Publicado el 10,abril 2019 - 12:34 |
Bonjour à tous et à toutes.
Je rencontre un problème avec l'utilisation de la fonction EnumèreChamp
Je constate que lorsque dans ma fenêtre j'ai un champ onglet dans un des volets d'un autre champ onglet, alors je n'arrive pas à atteindre le contenu des sous onglets en parcourant les champs par EnumèreChamp. Ou pire, il se mélange entre volets et sous volets d'onglets.
Pour accéder aux champs des conteneurs (tels que les onglets), j'ai une procédure récursive :
PROCEDURE INTERNE TraiteParent(LOCAL sParent est une chaîne) i est un entier = 1 sNomChamp est une chaîne tabParents est un tableau de chaînes sNomChamp = EnumèreChamp(sParent,i) TANTQUE sNomChamp <> "" i++ nType est un entier = {sParent + "." + sNomChamp, indChamp}..Type SI nType DANS (typDisposition, typFen, typGrp, typFenêtreInterne, typModèleDeChamp, typOnglet, typPanneau, typRegroupementRuban, typRuban, typSuperChamp, typTiroir, typVoletOnglet, typZoneMultiligne, typZoneRépétée) ALORS tabParents.Ajoute(sNomChamp) SINON Trace(sNomChamp) FIN sNomChamp = EnumèreChamp(sParent,i) FIN POUR TOUT sNomChamp de tabParents Trace(sNomChamp) TraiteParent(sParent + "." + sNomChamp) FIN FIN
TraiteParent(MaFenêtre..NomComplet)
Quelqu'un peut-il tester ce code. Je suis actuelle ment en WD24 54t
Merci |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 139 mensajes |
|
| Publicado el 11,abril 2019 - 10:17 |
Bon, comme je vois que le sujet ne passionne personne et que j'ai depuis expérimenté une solution à ce problème, je vous livre cette solution de contournement, en espérant que cela pourra aider un jour quelqu'un.
Le problème venait du fait que la fonction EnumèreChamp, lorsqu'elle s'applique à un onglet, renvoie le nom de chaque volet sous la forme
FEN_XXX.ONG_YYY.ALIAS_S_n
où n représente le N° de volet
Or, pour scruter le contenu d'un volet, je relançait EnumèreChamp avec ce nom et là, ça plantait ou ça ignorait les sous éléments de type Onglets.
Finanlement, en transformant le nom FEN_XXX.ONG_YYY.ALIAS_S_n en FEN_XXX.ONG_YYY[n], la fonction EnumèreChamp fonctionne à merveille !
J'ai donc complété ma fonction ainsi :
PROCEDURE INTERNE TraiteParent(LOCAL sParent est une chaîne)
i est un entier = 1 sNomChamp est une chaîne tabParents est un tableau de chaînes
p est un entier = Position(sParent,".ALIAS_S_") SI (p > 0) ALORS sParent = Remplace(sParent,".ALIAS_S_","[") + "]" FIN
sNomChamp = EnumèreChamp(sParent,i) TANTQUE sNomChamp <> "" i++ nType est un entier = {sParent + "." + sNomChamp, indChamp}..Type SI nType DANS (typDisposition, typFen, typGrp, typFenêtreInterne, typModèleDeChamp, typOnglet, typPanneau, typRegroupementRuban, typRuban, typSuperChamp, typTiroir, typVoletOnglet, typZoneMultiligne, typZoneRépétée) ALORS tabParents.Ajoute(sNomChamp) SINON Trace(sNomChamp) FIN
sNomChamp = EnumèreChamp(sParent,i)
FIN
POUR TOUT sNomChamp de tabParents Trace(sNomChamp) TraiteParent(sParent + "." + sNomChamp) FIN FIN
TraiteParent(MaFenêtre..NomComplet) |
| |
| |
| | | |
|
| | | | |
| | |
|