adressser une form dans une autre
-
mercredi 25 avril 2012 08:29
bonjour
Maintenant que le background worker marche, encore merci pour l'aide apportée, je patauge toujours....
J'ai un projet qui maquette l'interface homme machine de mon besoin le projet s'appelle Test6
J'ai deux forms, la première se nomme Form1.
La deuxième se nomme OpenAFile.
J’essaie d'adresser un membre de la form Form1 dans les méthodes de la form OpenAFile
voici le code de cette essai// d'abord dans le code de open a file, on construit un constructeur qui reçoit en paramètre la Form1 private: Form^ form1; public: OpenAFile(Form^ form1) { this->form1 = form1; } // puis dans Form1 on envoi cet appel private: System::Void openToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { Test6::OpenAFile^ newWindow = gcnew OpenAFile(this); newWindow->ShowDialog(); }Encore une fois c'est un problème de typage de handler (hat).
Mais à l'exécution on ouvre pas la bonne fenêtre
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { // on récupère dans la grille les éléments saisis et on débute le traitement // on rend la main a la form1 pour afficher la progress bar Test6::OpenAFile^ FormToOpen = this; System::Windows::Forms::Form^ form1 = &(this->form1); FormToOpen->Close(); form1->Controls->Add( form1->progressBar1);et dans cette méthode la conversion de from1 en System::Windows::Forms::Form^ n'est pas accepté: faut il passer par un cast?
ce sera cool de savoir ouvrir la bonne fenêtre
Jean Noël Martin
- Type modifié JeanNoel53 mercredi 25 avril 2012 09:24 Résolu
- Type modifié JeanNoel53 mercredi 25 avril 2012 09:26
- Modifié JeanNoel53 mercredi 25 avril 2012 09:47
Toutes les réponses
-
mercredi 25 avril 2012 12:45
Ta form1 n'est pas déjà déclarée?
dans ce cas un form1->Show(); suffirait si j'ai bien compris.
- Marqué comme réponse JeanNoel53 mercredi 25 avril 2012 18:19
-
mercredi 25 avril 2012 18:19
Pour l'ouverture de la bonne fenêtre il faut recopier la suite d'instruction du constructeur et non pas appeler le constructeur
OpenAFile(Form^ form1) { this->form1 = form1; InitializeComponent(); // //TODO: ajoutez ici le code du constructeur // Dans ce code il faut récupérer les donnée du fichier ini et initialiser les champs de la form textBox1->Text = L"English"; textBox2->Text = L"Word Document"; textBox3->Text = L"Interbase"; textBox4->Text = L"Coherence"; }on peut utiliser indifférement Show() ou ShowDialog()
Jean Noël Martin
- Marqué comme réponse JeanNoel53 mercredi 25 avril 2012 18:19
- Modifié JeanNoel53 mercredi 25 avril 2012 18:20
-
mercredi 2 mai 2012 15:48Modérateur
Je ne comprends pas pourquoi vous vous compliquez la vie.
Les objets de type OpenAFile ont une durée de vie très limité car c'est, à première vue, un formulaire modale.
Une fois ouverte, vous devez répondre à la question pour continuer, ok ?
Donc on utilise la méthode ShowDialog qui est conçu pour cela.
private: System::Void openToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { Test6::OpenAFile^ newWindow = gcnew OpenAFile(this); if(newWindow->ShowDialog()== ::DialogResult::OK) { Controls->Add(progressBar1); } }
Le seul truc, c'est de faire de "button1" de la classe OpenAFile, un bouton de sortie de la boucle modale avec le statu "OK".
Et c'est pas très compliqué, c'est dans les propriétés du bouton, la propriété "DialogResult" du bouton à mettre à OK.
C'est tous.
Paul Bacelar, Ex - MVP VC++
-
jeudi 3 mai 2012 13:23Bon: moi j'ai essaye Show() et après ShowDialog() et j'ai retenu la dernière : donc je suis d'accord avec vous.
Jean Noël Martin
-
jeudi 3 mai 2012 16:41Modérateur
OK.
Mais on est d'accord que "Void button1_Click(System::Object^ sender, System::EventArgs^ e)" ne sert à rien et qu'il faut l'enlever ?
Paul Bacelar, Ex - MVP VC++
-
vendredi 4 mai 2012 09:54
Oui;Jean Noël Martin
- Marqué comme réponse JeanNoel53 lundi 14 mai 2012 04:12

