[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 verwende 😕

    Hier 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 🙄


Anmelden zum Antworten