[gelöst][wxWidgets] wxListbook Probleme
-
Hi leute
Habe vor kurzem mal anfangen mich ein bisschen mit wxWidgets zu beschäftigen und wollte nun ein kleines Listingprogramm für meine entliehene Bücher programmieren (da ich immer vergesse sie zurückzugeben)
Die Bücher will ich eingtl mittels wxListbook anzeigen lassen und das Erstellen und Hinzufuegen von Panels geht auch problemlos, aber wenn ich zum Beispiel auf ein Textfeld in einem solchem, dem Listbook hinzugefügten Panel, drücke kann man weder Text eingeben noch bemerkt man irgendeine Reaktion. Dasselbe ist mit den Buttons, wenn man auf sie klickt erscheint keine "Clickanimation", man könnte genausogut irgendwo auf ein freien Platz im Fenster drücken.
Es ist irgendwie so als hätte ein anderes Windows Fenster gerade den Focus.Interessanterweise funktioniert der exakt selbe c++ Code problemlos wenn ich statt
wxListbook wxNotebook verwendeHier ist noch mein Konstruktor des Fenster:
BasicFrame::BasicFrame (const wxChar *title,int xpos,int ypos,int width,int height) : wxFrame((wxFrame*)NULL,-1, title,wxPoint(xpos, ypos),wxSize(width, height),wxDEFAULT_FRAME_STYLE) { // Eine Menübar erzeugen menu=new wxMenuBar(); datenmenu=new wxMenu(); datenmenu->Append(NEW_FILE,wxT("Neues Buch")); datenmenu->Append(DELETE_FILE,wxT("Buch loeschen")); datenmenu->Append(BEENDEN,wxT("Beenden")); menu->Append(datenmenu,wxT("Datei")); SetMenuBar(menu); //Listbook mit normalen panels und buchpanels erzeugen listbook=new wxListbook(this,wxID_ANY,wxDefaultPosition,wxSize(400,300),wxNB_MULTILINE | wxNB_FIXEDWIDTH); wxPanel *test1Buch=new wxPanel(this); //Irgendein normales Panel hinzufuegen wxPanel *test2Buch=new wxPanel(this); //"" BuchPanel *test=new BuchPanel(this); //Panel der Klasse Buchpanel hinzufuegen listbook->AddPage(test1Buch,wxT("Tab No. 1"),false); listbook->AddPage(test2Buch,wxT("Tab No. 2"),false); listbook->AddPage(test,wxT("test"),true); //statusbar erstellen statusbar=CreateStatusBar(2); }
Und hier noch die Klasse Buch Panel und deren Konstruktor (ich denke der Rest des Codes is irrelevant für das Problem und sonst wirds unübersichtlich
)
enum { NEW_FILE, DELETE_FILE, BEENDEN, BEARBEITEN, LOESCHEN, NAMENSFELD, DATUMSFELD, BUECHEREIFELD, INHALTSFELD }; class BuchPanel : public wxPanel { private: wxStaticText *ueberschrift; wxButton *loeschen; wxButton *bearbeiten; wxStaticText *buchname; wxStaticText *datum; wxStaticText *buecherei; wxStaticText *sonstiges; wxTextCtrl *buchname1; wxTextCtrl *datum1; wxTextCtrl *buecherei1; wxTextCtrl *sonstiges1; DECLARE_EVENT_TABLE() public: BuchPanel(wxWindow *parent); void eingabe_verarbeiten(wxCommandEvent &event); void felder_freigeben(wxCommandEvent &event); };
BuchPanel::BuchPanel(wxWindow *parent) : wxPanel(parent) { ueberschrift=new wxStaticText(this,wxID_ANY,wxT("Bücherdaten:"),wxPoint(110,50),wxDefaultSize,wxALIGN_CENTRE); bearbeiten=new wxButton(this,BEARBEITEN,wxT("Buch bearbeiten"),wxPoint(5,10)); loeschen=new wxButton(this,LOESCHEN,wxT("Buch loeschen"),wxPoint(180,10)); buchname=new wxStaticText(this,wxID_ANY,wxT("Büchername:"),wxPoint(10,75)); buchname1=new wxTextCtrl(this,NAMENSFELD,wxT("Name"),wxPoint(120,75),wxSize(150,20),wxTE_PROCESS_ENTER); datum=new wxStaticText(this,wxID_ANY,wxT("Rückgabedatum:"),wxPoint(10,100)); datum1=new wxTextCtrl(this,DATUMSFELD,wxT("Rückgabedatum"),wxPoint(120,100),wxSize(150,20),wxTE_PROCESS_ENTER); buecherei=new wxStaticText(this,wxID_ANY,wxT("Bücherei:"),wxPoint(10,125)); buecherei1=new wxTextCtrl(this,BUECHEREIFELD,wxT("Bücherei"),wxPoint(120,125),wxSize(150,20),wxTE_PROCESS_ENTER); sonstiges=new wxStaticText(this,wxID_ANY,wxT("Sonstiges/Inhalt:"),wxPoint(10,150)); sonstiges1=new wxTextCtrl(this,INHALTSFELD,wxT("/"),wxPoint(120,150),wxSize(150,75),wxTE_MULTILINE | wxTE_PROCESS_ENTER); }
Nochmal zum Verständnis: Mein Problem ist nicht, dass nicht die richtigen Funktion für die Events aufgerufen werden, sondern dass ich die Bedienungelemente erst gar nicht anklicken kann!
Naja bin wie immer dankbar für jede Hilfe
-
Ok habs doch noch gelöst. Mein Fehler war beim Erstellen der Panels das Hauptfenster als parent zu übergeben, anstatt dem listbook