PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Zone répétée et bouton
Zone répétée et bouton
Débuté par LC, 25 nov. 2020 09:44 - 25 réponses
Membre enregistré
628 messages
Popularité : +0 (16 votes)
Posté le 25 novembre 2020 - 09:44
Bonjour à tous,
un problème qui parait assez simple que je n'arrive pas à résoudre ...
j'ai une zone répétée avec à l'intérieur un bouton. je souhaiterais que ce bouton "apparaisse" uniquement
lorsque la ligne (enregistrement) sélectionnée. autrement dit si 10 enregistrements, le bouton doit apparaitre que sur l'enregistrement sélectionné et non sur les autres. Cette zone répétée est connectée (remplissage) à une requête
comment faire ?
Membre enregistré
283 messages
Popularité : +80 (92 votes)
Posté le 25 novembre 2020 - 09:50
Salut Bg, je te propose la solution suivante:
- Rend ton bouton invisible par défaut
- Dans le traitement de sélection de ligne de la zone répétée rend ton bouton visible ex:
i est un entier = ZoneRépétéeSelect(TonChampZoneRépétée)
TonChampZoneRépétée[i].TonBouton..Visible = Vrai


Bon codage j'attends ton retour :D

--
Maître de la POO
Membre enregistré
628 messages
Popularité : +0 (16 votes)
Posté le 25 novembre 2020 - 10:03
Merci pour ta réponse, ça fonctionne mais pas complètement ...
ce que voulais c'est que le bouton soit visible "uniquement" sur l'enregistrement sélectionnés et non sur les autres.
donc au fur et à mesure de la sélection d'enregistrement, les autres lignes doivent être invisible (les boutons bien sur ...)
Membre enregistré
283 messages
Popularité : +80 (92 votes)
Posté le 25 novembre 2020 - 10:05
Tu as toi même la réponse à ton problème :D
Dans le traitement de sortie de ligne de ta zone répétée rajoute le code suivant
i est un entier = ZoneRépétéeSelect(TonChampZoneRépétée)
SI TonChampZoneRépétée[i].TonBouton..Visible = Vrai ALORS
TonChampZoneRépétée[i].TonBouton..Visible = Faux
FIN


--
Maître de la POO
Membre enregistré
121 messages
Popularité : +8 (14 votes)
Posté le 25 novembre 2020 - 10:08
Bonjour,

Dans le code sélection d'une ligne de ta ZR

i est un entier = ZoneRépétéeSelect(TonChampZoneRépétée)
POUR TOUTE LIGNE nLigne de TonChampZoneRépétée
SI i = nLigne ALORS
TonChampZoneRépétée[i].TonBouton..Visible = Vrai
SINON
TonChampZoneRépétée[i].TonBouton..Visible = Faux
FIN
FIN


En reprenant le code de Ninjacodeur

--
Bon dev

Thibault
Membre enregistré
628 messages
Popularité : +0 (16 votes)
Posté le 25 novembre 2020 - 10:16
Réponse à Ninja Codeur :
j'ai bien évidemment essayé, l'évènement sortie de ligne, mais ça ne fonctionne pas, les boutons restent visibles
Membre enregistré
628 messages
Popularité : +0 (16 votes)
Posté le 25 novembre 2020 - 10:17
réponse à Thibault Roux :
je voudrais éviter de faire des boucles pour ça ... pas envie de faire "ramer" la zone répétée si beaucoup d'enreg
Membre enregistré
283 messages
Popularité : +80 (92 votes)
Posté le 25 novembre 2020 - 10:22
Quand tu dis que ça ne marche pas c'est à dire ? l’événement de sortie de ligne n'est pas exécuté ?

--
Maître de la POO
Membre enregistré
628 messages
Popularité : +0 (16 votes)
Posté le 25 novembre 2020 - 10:28
l'évènement se déclenche lorsque je re-clique dedans, bizarre comme phénomène, j'ai mis une trace pour voir ...
quoiqu'il en soit, lorsque je clique sur le premier enreg, ok le bouton devient visible mais lorsque je clique sur l'enreg 2
le un ne change pas
Membre enregistré
283 messages
Popularité : +80 (92 votes)
Posté le 25 novembre 2020 - 10:55
L'événement de sortie de ligne devrait pourtant s’exécuter...
La source de ta zone répétée est bien une requête ? est-elle en accès direct ? Si oui passe la en mémoire et reteste l’événement pour voir

Le bon événement est celui de sortie de ligne de la zone répétée et non sortie de zone répétée

Vérifie et revient moi.

--
Maître de la POO
Membre enregistré
628 messages
Popularité : +0 (16 votes)
Posté le 25 novembre 2020 - 11:14
oui relié à une requête en accès direct
Membre enregistré
628 messages
Popularité : +0 (16 votes)
Posté le 25 novembre 2020 - 11:16
même pb en mémoire ... ça parait normal , car ça ne change en rien les index de la zone répétée
Membre enregistré
283 messages
Popularité : +80 (92 votes)
Posté le 25 novembre 2020 - 11:17
Tu as bien saisie le code en sortie de ligne de la zone répétée ?

--
Maître de la POO
Membre enregistré
121 messages
Popularité : +8 (14 votes)
Posté le 25 novembre 2020 - 11:23
Je viens de tester ceci sur une ZR par programmation
je déclare en global de la fenêtre
gnLigneselectionné est un entier = 0

et ensuite dans sélection d'une ligne
SI gnLigneselectionné <>0 ALORS
ZR_SansNom1[gnLigneselectionné].BTN_BOUTON1..Visible = Faux
gnLigneselectionné= ZoneRépétéeSelect(ZR_SansNom1)
SINON
gnLigneselectionné= ZoneRépétéeSelect(ZR_SansNom1)
FIN

ZR_SansNom1[ZR_SansNom1].BTN_BOUTON1..Visible = Vrai


Est ce mieux ?

--
Bon dev

Thibault
Membre enregistré
628 messages
Popularité : +0 (16 votes)
Posté le 25 novembre 2020 - 11:27
Réponse à Ninja :
oui j'ai pris le bon évènement
Membre enregistré
283 messages
Popularité : +80 (92 votes)
Posté le 25 novembre 2020 - 11:30
Alors là, chez moi ça fonctionne nickel pourtant :D
Après tu peux toujours bricoler quelque chose mais bon je déteste partir sur ces solutions personnellement

--
Maître de la POO
Membre enregistré
628 messages
Popularité : +0 (16 votes)
Posté le 25 novembre 2020 - 11:31
Réponse à Thibault :
la dernière ligne plante à l'éxécution : indice 0 incorrect
Membre enregistré
628 messages
Popularité : +0 (16 votes)
Posté le 25 novembre 2020 - 11:35
Pour Thibault :
j'ai changé la dernière ligne par les 2 lignes de Ninja.
ça fonctionne bien lorsque je clique sur une ligne mais lorsque j'actionne la molette de la souris (ascenseur) sur toute la liste les boutons sont
tous visibles, ce n'est donc pas bon
Membre enregistré
628 messages
Popularité : +0 (16 votes)
Posté le 25 novembre 2020 - 11:38
réponse à Ninja :
pourtant j'ai bien ces 2 lignes dans l'évènement "selection d'une ligne" :
i est un entier = ZoneRépétéeSelect(ZR_Liste)
ZR_Liste[i].BTN_visualiser..Visible = Vrai
et ces 2 lignes suivantes dans l'évènement "sortie d'une ligne" :
i est un entier = ZoneRépétéeSelect(ZR_Liste)
ZR_Liste[i].BTN_visualiser..Visible = Faux
la zone répétée est reliée à une requête avec accès direct ...
Membre enregistré
121 messages
Popularité : +8 (14 votes)
Posté le 25 novembre 2020 - 11:41
Je ne rencontre pas ces deux problèmes, mon bouton est invisible par défaut.

Je sèche

--
Bon dev

Thibault
Membre enregistré
628 messages
Popularité : +0 (16 votes)
Posté le 25 novembre 2020 - 11:47
réponse à Thibault :
cette ligne plante :
ZR_Liste[ZR_Liste].BTN_visualiser..Visible = Vrai
indice à 0 ...
cette syntaxe ZR_Liste[ZR_Liste] est bonne ?
Membre enregistré
121 messages
Popularité : +8 (14 votes)
Posté le 25 novembre 2020 - 11:55
Pour moi, cette syntaxe "ZR_Liste[ZR_Liste]" est égal à

i est un entier = ZoneRépétéeSelect(ZR_Liste)
ZR_Liste[i].BTN_visualiser..Visible = Vrai

--
Bon dev

Thibault
Membre enregistré
283 messages
Popularité : +80 (92 votes)
Posté le 25 novembre 2020 - 11:58
Ok j'ai fais les test et tu avais raison. C'est très bizarre c'est sûrement du au fait que la zone répétée n'a aucun champ vu que le bouton est invisible à la sélection de la ligne. Il considère sûrement qu'il n'y'a pas d'entré de ligne
Bref j'ai ta solution :

En déclaration globale de ta fenêtre
indiceSélectionPrécédente est un entier


Code Sélection de ligne de ta zone répétée
i est un entier = ZoneRépétéeSelect(ZoneRépétée1)
// Première utilisation
SI indiceSélectionPrécédente = 0 ALORS
indiceSélectionPrécédente = i
ZoneRépétée1[i].BOUTON..Visible = Vrai
FIN

SI i <> indiceSélectionPrécédente ALORS
ZoneRépétée1[indiceSélectionPrécédente].BOUTON..Visible = Faux
ZoneRépétée1[i].BOUTON..Visible = Vrai
indiceSélectionPrécédente = i
FIN


--
Maître de la POO
Membre enregistré
628 messages
Popularité : +0 (16 votes)
Posté le 25 novembre 2020 - 12:08
Réponse à Thibault :
ça fonctionne, sauf la molette de la souris ou ascenseur, les enreg suivants ont le bouton visible, c'est pas bon du coup ....
Membre enregistré
283 messages
Popularité : +80 (92 votes)
Posté le 25 novembre 2020 - 12:26
Je tiens la solution :D Modifie un peu le code de sélection de ligne

i est un entier = ZoneRépétéeSelect(ZoneRépétée1)
// Première utilisation
SI indiceSélectionPrécédente = 0 ALORS
indiceSélectionPrécédente = i
ZoneRépétée1[i].BOUTON..Visible = Vrai
FIN

SI i <> indiceSélectionPrécédente ALORS
ZoneRépétée1[indiceSélectionPrécédente].BOUTON..Visible = Faux
indiceSélectionPrécédente = i
ZoneRépétée1[i].BOUTON..Visible = Vrai
FIN


Rajoute ce code dans le traitement d'affichage d'une ligne
SI IndiceEnCours() <> indiceSélectionPrécédente ALORS
ZoneRépétée1[IndiceEnCours()].BOUTON..Visible = Faux
FIN

J'attends ton retour ;)

--
Maître de la POO
Membre enregistré
628 messages
Popularité : +0 (16 votes)
Posté le 25 novembre 2020 - 12:45
ok, ça fonctionne nickel...
Je vous remercie à tous les 2 pour avoir pris du temps pour moi.
voici donc le code qui fonctionne, si ça peux aider d'autres personnes :