System::EventHandler
-
Einen wunderschönen guten Tag die Herrschaften,
Quähle mich schon seit 2 Tagen auf den Microsoft-Sites herum und versuche näheres über den EventHandler herauszufinden.
Mein Problem ist wie folgt:
In Meiner Form1 deklariere ich einen Button, welchen ich zur Form2 (Instanz(newMDIChild)) sende und ihn dort sichtbar machen möchte. Dies gelingt auch super.
Nun, dem Button fehlt jetzt leider noch das Click- Ereignis. Mein Code ist wie folgt:
Button^ button1 = gcnew Button(); button1->Text = L"OK"; button1->Name = L"btnSenden"; button1->Location = Point(515,104); button1->Size = System::Drawing::Size(45,45); button1->Cursor = System::Windows::Forms::Cursors::Hand; button1->Click += gcnew System::EventHandler(this, &newMDIChild::button1_Click);
Meine Fehlermeldung ist wie folgt:
Fehler error C2825: "newMDIChild": Muss eine Klasse oder ein Namespace sein, wenn gefolgt von "::". Fehler error C2065: 'button1_Click': nichtdeklarierter Bezeichner Fehler error C2039: 'button1_Click': Ist kein Element von '`global namespace'' Fehler error C3924: Fehler in Argument #2 des Delegatkonstruktoraufrufs "System::EventHandler":
Könnt ihr mir helfen?
Ich sage schon vorab DANKESCHÖN
phil74
-
Hallo Phil74
ist das Thema noch aktuell?
Wenn ja, lege mal ein Projekt an und nenne es Button und überschreibe den kompletten Code der Form1 mit diesem...#pragma once namespace Button1 { 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 { private: Button^ button1; public: Form1(void) { InitializeComponent(); // //TODO: Konstruktorcode hier hinzufügen. // this->button1 = gcnew Button(); this->button1->Bounds = Rectangle(Point(200,100),System::Drawing::Size(100,50)); this->button1->Text = "Beenden"; this->Controls->Add(button1); this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click); this->button1->MouseMove += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::button1_MouseMove); } protected: /// <summary> /// Verwendete Ressourcen bereinigen. /// </summary> ~Form1() { if (components) { delete components; } } protected: protected: protected: 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(); // // Form1 // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(370, 264); this->Name = L"Form1"; this->Text = L"Form1"; this->ResumeLayout(false); } #pragma endregion private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { Close(); } private: System::Void button1_MouseMove(System::Object^ sender, System ::Windows::Forms::MouseEventArgs^ e) { button1->Text = "Close();"; } }; }
Dieser Code legt zur Laufzeit einen Button sowie das Click Ereignis und MouseMove Ereignis an, welches mit der Funktion Close hinterlegt ist.
Gruß, Doug_HH
-
Guten Morgen Doug HH,
Danke erstmals für Deine Hilfe...
Ja, das ist noch aktuell.
Mein Problem besteht darin, das ich von Form1 (MDIcontainer) einen Button deklariere und diesen dem MDIChild(Form2) senden will. Dieser Button wird in Form2 gezeichnet. Auch Seinen EventHandler(Button_Click) wird übergeben.
Sobald ich aber den "button1->Click += gcnew System::EventHandler(this, &newMDIChild::button1_Click);" bei der Button-Deklaration anfüge, bekomme ich diese Fehlermeldung:
Fehler error C2825: "newMDIChild": Muss eine Klasse oder ein Namespace sein, wenn gefolgt von "::". Fehler error C2065: 'button1_Click': nichtdeklarierter Bezeichner Fehler error C2039: 'button1_Click': Ist kein Element von '`global namespace'' Fehler error C3924: Fehler in Argument #2 des Delegatkonstruktoraufrufs "System::EventHandler":
Phil74
-
Sieht so aus als wäre "newMDIChild" keine Klasse sondern ein Objekt.
-
Form2^ newMDIChild = gcnew Form2
Objekt?, Instanz?
-
Wenn Du es genau nehmen willst eine Referenz, die auf eine Instanz (oder ein Objekt) verweist. Ist aber auch egal, da vor :: ein Typ stehen muss, kein Variablenbezeichner. Also müsste dort &Form2::button1_Click stehen, aber dann beschwert sich der Compiler, dass eine Methode aus Form2 nicht mit einem Objekt aus Form1 aufgerufen werden kann. Leider weiss ich nicht, wie man ein Objekt an einen Delegaten in C++/CLI bindet...
EDIT:
Quatsch, doch, weiss ichSo müsste es lauten:
button1->Click += gcnew System::EventHandler(newMDIChild, &Form2::button1_Click);
-
Könnte es vielleicht mit einer generischen Klasse des Buttons gehen, die ich in Form1 include?
Gruss