Interaktion zwischen Form1 und Form2
-
Hallo zusammen,
ich stehe vor einem Problem: Ich habe mir eine kleine Windows-Forms-Anwendung geschrieben, in der ein Formular (nennen wir es Form1) ein anderes (Form2) aufruft. Klappt soweit auch wunderbar.Jetzt möchte ich aber in Form1 auf Ereignisse in Form2 reagieren...wie geht das?
Mein Quellcode:
Form1.h
#pragma once #include "Form2.h" namespace forms_test { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; /// <summary> /// Zusammenfassung für Form1 /// /// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch /// die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern, /// das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt. /// Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen /// arbeiten, die diesem Formular zugewiesen sind. /// </summary> public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); // //TODO: Konstruktorcode hier hinzufügen. // frm2 = gcnew Form2; } protected: /// <summary> /// Verwendete Ressourcen bereinigen. /// </summary> ~Form1() { if (components) { delete components; } } private: System::Windows::Forms::Button^ button1; Form2^ frm2; protected: private: /// <summary> /// Erforderliche Designervariable. /// </summary> System::ComponentModel::Container ^components; #pragma region Windows Form Designer generated code /// <summary> /// Erforderliche Methode für die Designerunterstützung. /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. /// </summary> void InitializeComponent(void) { this->button1 = (gcnew System::Windows::Forms::Button()); this->SuspendLayout(); // // button1 // this->button1->Location = System::Drawing::Point(66, 12); this->button1->Name = L"button1"; this->button1->Size = System::Drawing::Size(134, 23); this->button1->TabIndex = 0; this->button1->Text = L"Form2 aufrufen!"; this->button1->UseVisualStyleBackColor = true; this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click); // // Form1 // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(292, 49); this->Controls->Add(this->button1); this->Name = L"Form1"; this->Text = L"Form1"; this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load); this->ResumeLayout(false); } #pragma endregion private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { frm2->Visible = true; } private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { frm2->Show(); frm2->Visible = false; } }; }
Form2.h
#pragma once using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; namespace forms_test { /// <summary> /// Zusammenfassung für Form2 /// /// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch /// die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern, /// das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt. /// Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen /// arbeiten, die diesem Formular zugewiesen sind. /// </summary> public ref class Form2 : public System::Windows::Forms::Form { public: Form2(void) { InitializeComponent(); // //TODO: Konstruktorcode hier hinzufügen. // } protected: /// <summary> /// Verwendete Ressourcen bereinigen. /// </summary> ~Form2() { if (components) { delete components; } } protected: private: /// <summary> /// Erforderliche Designervariable. /// </summary> System::ComponentModel::Container ^components; #pragma region Windows Form Designer generated code /// <summary> /// Erforderliche Methode für die Designerunterstützung. /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. /// </summary> void InitializeComponent(void) { this->SuspendLayout(); // // Form2 // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(292, 111); this->Name = L"Form2"; this->Text = L"Form2"; this->FormClosing += gcnew System::Windows::Forms::FormClosingEventHandler(this, &Form2::Form2_FormClosing); this->ResumeLayout(false); } #pragma endregion private: System::Void Form2_FormClosing(System::Object^ sender, System::Windows::Forms::FormClosingEventArgs^ e) { e->Cancel = true; this->Visible=false; } }; }
Wenn jetzt in Form2 zum Beispiel ein Button angeklickt wird, soll in Form1 in bestimmter Weise darauf reagiert werden...aber blos wie?
Danke und Grüße
Sebastian
-
Du nutzt nicht die MFC, bist also im falschen Forum!
Hier gehörst du hin:
http://www.c-plusplus.net/forum/viewforum-var-f-is-58.html
-
Boing! Kann das jemand verschieben?
-
Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Soll Form2 nach Reaktion geschlossen werden?? wenn ja, dann Solltest du frm2 Modal anzeigen lassen (->ShowDialog() ). Der Button zum Schliessen der frm2 muss die Einstellung "OK" der Eigenschaft "DialogResult" haben, und eine Öffentliche Methode , z.B.
public: Int32 IntWertLiefern(){ return (IntVairiable); }
besitzen.
In Form1 in der Methode in der du Die frm2 öffnest muss dann folgender Code Stehen:
Form2 ^frm2 = gcnew Form2; frm2->ShowDialog(); if(frm2->DialogResult== ::DialogResult::OK){ Int32 var1 = frm2->IntWertLiefern(); frm2->Close(); }
greez denjo303