IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Renvoyer plusieurs valeurs à la fermeture d'une fenêtre [WD12]


Sujet :

WinDev

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Points : 130
    Points
    130
    Par défaut Renvoyer plusieurs valeurs à la fermeture d'une fenêtre
    Bonjour,

    Je voudrais renvoyer deux valeurs en sortie de fenêtre, J'ai donc créé une variable de type tableau de 2 entiers et en sortie de ma fenêtre je fais

    MaFenêtre..ValeurRenvoyée = MonTableau

    Seulement quand j'appelle ma fonction Ouvre (MaFenêtre) pour récupérer les valeurs dans une autre fenêtre j'ai un message d'erreur qui me dit "la fonction Ouvre aurait du recevoir une valeur". Alors est-ce qu'on a bien le droit de passer un tableau en paramètre de sortie de fenêtre ? Est-ce qu'il y a un autre moyen de procéder ?

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Février 2003
    Messages
    4 341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 4 341
    Points : 5 953
    Points
    5 953
    Par défaut
    Je ne crois pas qu'un tableau puisse être "renvoyer" comme valeur de retour de fonction.

    Par contre, tu peux utiliser 2 paramètres variables dans une procédure.

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Points : 130
    Points
    130
    Par défaut
    Oui mais dans ValeurRenvoyée je ne peux indiquer qu'une variable

  4. #4
    Membre actif Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Points : 294
    Points
    294
    Par défaut
    Tu peux renvoyer plusieurs valeurs dans une chaine avec un séparateur, sérialiser...

    T'as plein de solutions !

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Points : 130
    Points
    130
    Par défaut
    Oui comme je devais renvoyer deux chaines de taille fixe je les ai concaténées. Mais bon je suis pas fan je trouve pas ça clean

  6. #6
    Membre actif Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Points : 294
    Points
    294
    Par défaut
    Bah sinon, vu que les paramètres dans Windev sont toujours passés par adresse, tu peux passer les valeurs de retour en paramètre à la fenêtre et les modifier directement.

    Comme je te disais aussi, tu peux sérialiser ton tableau pour ne renvoyer qu'une chaine et le désérialiser dans le code appelant, etc..

  7. #7
    Membre expérimenté Avatar de klbsjpolp
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 065
    Points : 1 322
    Points
    1 322
    Par défaut
    Sinon il y a les structures, c'est encore plus clean qu'un tableau.

  8. #8
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Points : 130
    Points
    130
    Par défaut
    Je viens de faire avec des structures (en effet l'idée me plait c'est très propre comme solution) mais ça me ramène toujours à cette erreur : la fonction Ouvre aurait du renvoyer une valeur je comprends pas j'ai essayer avec ValeurRenvoyée et avec RENVOYER mais rien n'y fait...

  9. #9
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 344
    Points : 3 860
    Points
    3 860
    Par défaut
    Si je ne me trompe pas, il faut utiliser Ferme(<tafenêtre>, <valeurAretourner>).

    Pense également à la fermeture par la petite croix si elle est active.

  10. #10
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Points : 130
    Points
    130
    Par défaut
    J'ai essayé avec Ferme (Fenêtre, ValeurARetourner) ça marche pas non plus. Y'a trois méthodes pour renvoyer une valeur :
    - Ferme (Fenêtre, ValeurARetourner)
    - RETOURNER ValeurARetourner
    - MaFenêtre..ValeurRenvoyée = ValeurARetourner avant la fonction freme

    Aucune ne marche... avec ma structure. Je viens d'essayer avec une simple chaîne et ça fonctionne seulement voilà j'ai besoin de passer plusieurs informations en paramètre moi...

  11. #11
    Membre expérimenté Avatar de klbsjpolp
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 065
    Points : 1 322
    Points
    1 322
    Par défaut
    Ta fenêtre renvoi toujours une chaine mais tu peux sérialiser une structure plutôt que de créer un chaîne concaténée.

  12. #12
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 66
    Points : 41
    Points
    41
    Par défaut
    Ce que tu peux faire c'est avant de fermer ta fenêtre passer les valeurs de ton tableau aux champs de l'autre fenêtre.

    exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	gnRenvoi1 =FEN_avectableau.TABLEAU[valeurarenvoyee]
    	gsrenvoi2=FEN_avectableau.TABLEAU[valeurarenvoyee2]
                 gsrenvoi3=FEN_avectableau.TABLEAU[valeurarenvoyee3]
                  ......
    	FEN_2.champsaisie=gsrenvoi2
    	FEN_2.champsaisie=gsrenvoi2
                 FEN_2.champsaisie=gsrenvoi3
                  ..............
    	Ferme(FEN_TsClients,gnRenvoi1)
    je ne sais pas si ça marchera avec ta structure, en tout cas pour moi renvoyé des valeurs d'un champ table à une autre table d'uen autre fenêtre ça marche bien!

    C'est pas très brillant comme solution mais ça fonctionne.

  13. #13
    Inactif  
    Profil pro
    Inscrit en
    Février 2003
    Messages
    4 341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 4 341
    Points : 5 953
    Points
    5 953
    Par défaut
    De toute façon, si tu as ce message d'erreur, c'est que tu as un endroit dans ton code, ou tu fermes la fenêtre, sans renvoyer de valeur.

    Pour éviter cela, il y a longtemps que j'utilise des variables globales (en générale appelées "tg_Retour" avec t = type ;-) ) et que j'initialise à l'ouverture de la fenêtre.

    Ensuite, dans le code de fermeture je place RENVOYER( tg_Retour). Ainsi, quelque soit l'endroit d'où je ferme la fenêtre, je suis sûr de renvoyer une valeur !

  14. #14
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Points : 130
    Points
    130
    Par défaut
    Les variables globales c'est pas top top mieux vaut éviter ça. Bon ben le problème survient bien quand on renvoie un tableau ou une structure, la sérialisation règle le problème.

  15. #15
    Inactif  
    Profil pro
    Inscrit en
    Février 2003
    Messages
    4 341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 4 341
    Points : 5 953
    Points
    5 953
    Par défaut
    Que reproches-tu aux variables globales ?

  16. #16
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Points : 130
    Points
    130
    Par défaut
    Heu ben les variables globales nuisent à la lisibilité du programme, comme on peut y accéder de n'importe ou, on ne sait pas précisément quand c'est le cas. Cela induit des effets de bord indésirables. Les variables globales consomment également plus de ressources (même si ça peut paraître ridicule de nos jours). En bref l'utilisation intempestive de variables globales est fortement déconseillée et le passage de paramètre est une solution bien meilleure quand elle est possible.

  17. #17
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Tout simplement par souci de propreté. Limiter la durée de vie d'une variable au minimum nécessaire est une pratique qu'il n'est aujourd'hui pas la peine de justifier.

    Si windev ne permet pas de retourner des variables complexes à partir d'une fenêtre, je préfère utiliser un paramètre passé par référence ou un retour sérialisé plutôt qu'une variable globale.

  18. #18
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Points : 130
    Points
    130
    Par défaut
    Oui voilà, c'est ce que j'ai fait y'a même des fonctions exprès pour (Sérialise et DéSérialise) donc ça passe nikel maintenant.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Renvoyer plusieurs valeurs avec une fonction
    Par Kestion100 dans le forum Excel
    Réponses: 4
    Dernier message: 10/12/2014, 11h56
  2. Réponses: 3
    Dernier message: 13/11/2008, 09h21
  3. [WD 9] Renvoyer plusieurs valeurs
    Par jo_la_pasteque dans le forum WinDev
    Réponses: 13
    Dernier message: 10/04/2008, 15h05
  4. Réponses: 8
    Dernier message: 06/04/2006, 18h45
  5. [C#] Renvoyer une valeur à la fermeture d'une forms
    Par diaboloche dans le forum Windows Forms
    Réponses: 6
    Dernier message: 14/03/2006, 11h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo