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

C++/CLI Discussion :

Récupérer une variable d'une boite de dialogue à l'autre


Sujet :

C++/CLI

  1. #1
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2006
    Messages : 46
    Par défaut Récupérer une variable d'une boite de dialogue à l'autre
    Bonjour,

    Aujourd'hui, mon problème c'est de recopier les variables rentrées dans un formulaire dans mon Form1, dans une nouvelle Form2, pour récapituler les choix de l'utilisateur.

    Comment faire pour récupérer ces variables?

    Merci bien

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    tu peux t'inspirer de ce qu'il y a dans la faq C++/CLI http://dotnet.developpez.com/faq/cpp...sspublicmethod

  3. #3
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2006
    Messages : 46
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    //Dans Form1
    public void TraitementForm1()
    {
     
    }
     
    public void OuvertureForm2()
    {
    form2 ^maForm2 = gcnew form2();
    maForm2->Owner = this;
    maForm2->Show();
    }
     
    //Dans MaForm2
     
    private void ButtonOk_Click(object sender, System.EventArgs e)
    {
    Form1 ^maForm1 = safe_cast<Form1 ^>(this->Owner);
    maForm1->TraitementForm1();
    }
    En fait, je ne comprend pas trop le code... Donc je n'arrive pas à l'adapter

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    ben, tout dépend de ce que tu veux faire, mais imaginons que tu ais affiche ta form2 qui contient un textbox, et que tu veux l'afficher dans ta form1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    form2 ^maForm2 = gcnew form2();
    maForm2->ShowDialog();
    this->textBox1->Text = maForm2->GetValueOfTextBox();
    avec dans la form2 un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public String ^ Form2::GetValueOfTextBox()
    {
       return this->TextBox1->Text;
    }
    c'est une possibilité

  5. #5
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2006
    Messages : 46
    Par défaut
    Et si on veut récupérer la valeur de la textbox dans la Form1 pour la recopier dans la Form2?

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    c'est là qu'on s'inspire du code dans la faq ...

    lorsqu'on instancie l'objet form2, on lui passe l'objet courant form1 (donc this)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void OuvertureForm2()
    {
    form2 ^maForm2 = gcnew form2();
    maForm2->Owner = this;
    maForm2->ShowDialog();
    }
    et donc ca veut dire que la form2, quand elle va se lancer, elle va "connaitre la form1" grace à la propriété owner.
    Donc, on récupère la form1 en castant le owner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1 ^maForm1 = safe_cast<Form1 ^>(this->Owner);
    et après, on peut récupérer un membre public de la form1 (ou un accesseur public)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this->textBox1->Text = maForm1->GetValueOfTextBox();
    avec dans form1, la méthode en publique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public String ^ Form1::GetValueOfTextBox()
    {
       return this->TextBox1->Text;
    }
    c'est plus clair ?

  7. #7
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2006
    Messages : 46
    Par défaut
    C'est beaucoup plus clair, merci.

    Cependant, j'instancie l'objet Form 2 dans cet évènement (fichier form1.h)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    				Form2 ^maForm2 = gcnew Form2();
    				maForm2->Owner = this;
    				maForm2->Show(); // ShowDialog si tu veux qu'elle soit modal
    			 }
    Dans le fichier form2.h, je veux donc caster le owner au lancement de la form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private: System::Void Form2_Load(System::Object^  sender, System::EventArgs^  e) {
    			 Form1 ^maForm1 = safe_cast<Form1 ^>(this->Owner);
    		 }
    Mais il ne me reconnais pas Form1

    Je le déclare donc au début
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private: System::Windows::Forms::Form^	Form1;
    Mais maintenant c'est maForm1 qu'il ne reconnait pas...

    je ne pense pas etre sur la bonne route.

  8. #8
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    Citation Envoyé par DjSeblaterreur
    Mais il ne me reconnais pas Form1

    Je le déclare donc au début
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private: System::Windows::Forms::Form^	Form1;
    Mais maintenant c'est maForm1 qu'il ne reconnait pas...

    je ne pense pas etre sur la bonne route.
    c'est pas du tout comme ca qu'il faut faire
    là, tu déclares un objet qui s'appelle Form1 de type Form
    ca veut dire quoi il ne reconnait pas Form1 ? tu as fait un include "Form1.h" au début de ton fichier ?

  9. #9
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2006
    Messages : 46
    Par défaut
    Sans la mauvaise déclarataion de la Form1 (dans form2.h), voici mon message d'erreur
    \Form2.h(229) : error C2065: 'Form1' : undeclared identifier

  10. #10
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    Citation Envoyé par nico-pyright(c)
    tu as fait un include "Form1.h" au début de ton fichier ?

  11. #11
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2006
    Messages : 46
    Par défaut
    Je l'avais déjà fais, mais cela fais des inclusions multiples...

    \Form2.h(1) : fatal error C1014: too many include files : depth = 1024
    Form2.cpp

  12. #12
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    tu dois faire des inclusions uniques mais cela doit l'etre par défaut
    il faut aussi que tu fasses des déclarations anticipées de tes classes
    Dans ton Form2.h,
    Dans ton Form1.h,
    en haut, avec la déclaration de ta classe

  13. #13
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2006
    Messages : 46
    Par défaut
    Oui, en effet il y a bien le #pragma once, mais je ne savais pas ce que cela voulais dire.

    \Form2.h(230) : error C2682: cannot use 'safe_cast' to convert from 'System::Windows::Forms::Form ^' to 'Form1 ^'
    Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    .\VilmCartouches.cpp(16) : error C2872: 'Form1' : ambiguous symbol
    could be '\Form2.h(2) : Form1'
    or '\Form1.h(24) : VilmCartouches::Form1'
    .\VilmCartouches.cpp(16) : error C2512: 'Form1' : no appropriate default constructor available
    Form23.cpp
    \Form23.h(230) : error C2682: cannot use 'safe_cast' to convert from 'System::Windows::Forms::Form ^' to 'Form1 ^'
    Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private: System::Void Form2_Load(System::Object^  sender, System::EventArgs^  e) {
    			 Form1 ^maForm1 = safe_cast<Form1 ^>(this->Owner);
    		 }

  14. #14
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    quand j'aurai 5 minutes dans la fin de journée, je te ferai un exemple

  15. #15
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2006
    Messages : 46
    Par défaut
    C'est gentil, car c'est vrai que je m'embrouille de plus en plus.

    Merci pour tout!

  16. #16
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    tiens, regarde cet exemple :
    Fichiers attachés Fichiers attachés

  17. #17
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2006
    Messages : 46
    Par défaut
    Merci beaucoup pour ton exemple. Je me rends compte que je n'étais pas organisé!


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

Discussions similaires

  1. [Débutant] Affecter une variable d'une classe C# à une variable Javascript
    Par SultanGeek dans le forum C#
    Réponses: 0
    Dernier message: 20/06/2015, 20h42
  2. Récupérer le nom d'une colonne d'une table dans une variable
    Par mimi51340 dans le forum Général Java
    Réponses: 4
    Dernier message: 13/03/2008, 14h23
  3. Réponses: 5
    Dernier message: 28/09/2007, 14h58
  4. Réponses: 6
    Dernier message: 31/05/2007, 18h10
  5. Comment récupérer le contenu d'une URL dans une variable ?
    Par Fildz dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/08/2006, 09h26

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