Form2 aus Form1 aufrufen
-
Hey
Ich arbeite mit wxWidgets. Dort habe ich ein wxMenuItem. Wenn ich auf dieses klicke, soll ein weiteres Fenster aufgehen. Hab schon echt viele Möglichkeiten durchgearbeitet, doch ich schaffe es nicht.#include "PersonEintragen.h"
void MDIView::OnNewSelection( wxCommandEvent& event ) { PersonEintragen *person = new PersonEintragen(); person->Show(); }
Was mache ich falsch?
-
Von welcher/welchen Klassen erbt denn PersonEintragen ? Das wird ja wohl eine selbst geschriebene Klasse sein und da diese hier niemand kennt (ohne das du den Code hinzufügst) wirds auch mit einer vernünftigen Antwort schwierig.
-
Sieht zur Zeit so aus
PersonEintragen.cpp
#include "PersonEintragen.h" PersonEintragen::PersonEintragen( wxDocument* doc, wxView *view, wxDocMDIParentFrame* parent ) : PersonEintragenGUI( doc, view, parent ) { } struct adresse { wxString name[30]; wxString vorname[30]; wxString strasse[30]; wxString plz[30]; wxString ort[30]; wxString land[30]; wxString telefon[30]; wxString email[30]; wxString position; wxString verein; };
PersonEintragen.h
#ifndef __PersonEintragen__ #define __PersonEintragen__ /** @file Subclass of PersonEintragenGUI, which is generated by wxFormBuilder. */ #include "wxGUI.h" /** Implementing PersonEintragenGUI */ class PersonEintragen : public PersonEintragenGUI { protected: // Handlers for PersonEintragenGUI events. void OnTextName( wxCommandEvent& event ); void OnTextVorname( wxCommandEvent& event ); void OnTextStrasse( wxCommandEvent& event ); void OnTextPLZ( wxCommandEvent& event ); void OnTextOrt( wxCommandEvent& event ); void OnTextTelnr( wxCommandEvent& event ); void OnTextEmail( wxCommandEvent& event ); void OnTextLand( wxCommandEvent& event ); void OnChoiceVerein( wxCommandEvent& event ); void OnChoicePosition( wxCommandEvent& event ); void OnOKClick( wxCommandEvent& event ); void OnClearClick( wxCommandEvent& event ); public: /** Constructor */ PersonEintragen( wxDocument* doc, wxView *view, wxDocMDIParentFrame* parent ); }; #endif // __PersonEintragen__
MDIView.cpp
#include "MDIView.h" #include <wx/plotctrl/plotprnt.h> #include "PersonEintragen.h" IMPLEMENT_DYNAMIC_CLASS(MDIView, wxView) /****************************** Konstruktor *******************************/ MDIView::MDIView() { doc = NULL; kv = NULL; } MDIView::~MDIView() { } /************************** Ende des Konstruktors **************************/ /******************* Funktionsmember MDIView::OnCreate *********************/ bool MDIView::OnCreate (wxDocument* doc, long int flags) { this ->doc = (MDIDoc*)doc; kv = new ViewFormGUI (doc, this, wxGetApp().frame); wxGetApp ().ConnectUUIDis(false); /* UUI Connects */ //Connect( wxID_FILE_SOMETHING, wxEVT_UPDATE_UI, wxUpdateUIEventHandler( MDIView::UUIEna ) ); // Connect( kv->mnuDataNew->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MDIView::OnNewSelection ) ); Connect(wxID_NEWDATA, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MDIView::OnNewSelection )); kv ->Show (true); SetFrame (kv); Activate (true); return true; } /**************************** Ende des Funktion ****************************/ void MDIView::OnNewSelection( wxCommandEvent& event ) { PersonEintragen *person = new PersonEintragen(); person->Show(); } /******************* Funktionsmember MDIView::OnClose *********************/ bool MDIView::OnClose (bool termWindow) { if ( !GetDocument () ->Close () ) return false; SetFrame (NULL); Activate (false); if (termWindow) { delete kv; } wxGetApp ().ConnectUUIDis(true); return true; } /**************************** Ende des Funktion ****************************/ /******************** Funktionsmember MDIView::OnDraw **********************/ void MDIView::OnDraw (wxDC* dc) { } /**************************** Ende des Funktion ****************************/ /***************** Funktionsmember MDIView::UUIEna **********************/ void MDIView::UUIEna( wxUpdateUIEvent& event ) { event.Enable (true); } /**************************** Ende des Funktion ****************************/
-
AhnungsloserNewbie schrieb:
Hey
Ich arbeite mit wxWidgets. Dort habe ich ein wxMenuItem. Wenn ich auf dieses klicke, soll ein weiteres Fenster aufgehen. Hab schon echt viele Möglichkeiten durchgearbeitet, doch ich schaffe es nicht.#include "PersonEintragen.h"
void MDIView::OnNewSelection( wxCommandEvent& event ) { PersonEintragen *person = new PersonEintragen(); person->Show(); }
Was mache ich falsch?
Du schon wieder :P.
Grundsätzlich ist der Ansatz richtig, birgt aber Gefahren.
Erstmal erzeugst du hier ein Memory Leak, weil person nie gelöscht wird per delete.class PersonEintragen : public PersonEintragenGUI
Was ist die Basisklasse von PersonEintragenGUI? wxDialog?
-
das mit dem memory leaks ist mir jetzt klar
ich habs ohne pointer versucht, aber dann geht gar nichts mehrBasisklasse ist wxDialog, ja
-
Der Fehler ist übrigens:
No matching function for call to 'PersonEintragen::PersonEintragen();
-
Wie man in PersonEintragen.cpp sehen kann erwartet der Konstruktor (PersonEintragen::PersonEintragen) deiner Klasse drei Parameter.
Aber du versuchst das Objekt ohne Parameter zu erstellen.
-
Habs gelöst. Hab ein falsches Fenster genommen, muss ein Dialog- Fenster sein. Dann funktionierte es.
Danke für eure hilfe
-
Mich würde mal das Gesamt Projekt und Konzept interessieren, denn vieles hier schaut mir ein wenig sehr verschachtelt aus. Warum eine neue Klasse "PersonEintragen" wenn du eh schon eine (PersonEintragenGUI) hast?
Arbeitest du mit einem FormDesigner? Wenn ja, dann würde ich keinen C++ Code generieren lassen sondern ein wxRC File.