wxDev-C++: Sprung in falsche Event-Routine
-
Ich versuche mich in wxDev-C++ einzuarbeiten. Ich habe 2 grids auf Panel1.
Für grid1 wurde die Event-Routine
void Projekt1Frm::WxGrid1CellChange(wxGridEvent& event)
erzeugt. Entsprechend für grid2. Sobald aber ein Feld in grid1 verändert wird, springt das Programm in die Event-Routine von grid2. Focus setzen nützt nichts.
Wer kann mir helfen ?
-
Hätte dazu ein paar Fragen:
* Hast du verschiedene WindowIDs (2.Argument)
* Auch 2 Connects oder Event Table einträge
* Wie hast du die Grids positioniert? mit Sizern oder garnicht oder mit genauer angabe?
* Verändert sich, wenn du im ersten Grid was änderst, auch nichts im 2.?wenn du mit Designer arbeitest, schau dir lieber mal den erzeugten Code an.
MfG
Yoschi
-
Hallo yoshi,
erst einmal vielen Dank für deine Antwort auf meine Frage. Was deine Rückfragen betreffen, so will ich versuchen, dir die nötigen Informationen zu geben.
Beide Grids wurden mit wxDev-C++ durch Anklicken auf dem Panel1 erzeugt. Hier die erzeugten Zeilen für Grid1:
WxGrid1 = new wxGrid(WxPanel1, ID_WXGRID1, wxPoint(37,160), wxSize(287,161));
WxGrid1->SetFont(wxFont(8, wxSWISS, wxNORMAL,wxNORMAL, false, wxT("Tahoma")));
WxGrid1->SetDefaultColSize(50);
WxGrid1->SetDefaultRowSize(25);
WxGrid1->SetRowLabelSize(50);
WxGrid1->SetColLabelSize(25);
WxGrid1->CreateGrid(5,5,wxGrid::wxGridSelectCells);
Entsprechende gibt es für Grid2, natürlich mit anderer ID. Auch wurden 2 Einträge in die Event-Tabelle gemacht:
////Event Table Start
BEGIN_EVENT_TABLE(Projekt1Frm,wxFrame)
////Manual Code Start
////Manual Code EndEVT_CLOSE(Projekt1Frm::OnClose)
EVT_GRID_CELL_CHANGE(Projekt1Frm::WxGrid2CellChange)
EVT_GRID_CELL_CHANGE(Projekt1Frm::WxGrid1CellChange)
EVT_MENU(ID_MNU_EXIT_1004, Projekt1Frm::Mnuexit1004Click)
END_EVENT_TABLE()
////Event Table End
Wenn ich in Grid2 in Zelle 1 etwas reinschreibe, so kann ich mir den Text in einem Edit-Fenster ausgeben lassen. Wenn ich dagegen Text in Grid1 eintrage,
so passiert gar nichts, weder in Grid2 noch im Edit-Fenster.
Ich hoffe, dass du mit diesen Hinweisen was anfangen kannst, ansonsten müsste ich das kleine Testprogramm mal posten. Wie geht das am besten?
MFG
Koprom
-
Ich glaube, ich kenne dein Problem.
Das "Project1Frm" ist dein Fenster. (bitte verbessere mich, wenn ich falsch liege). In der Klassendefinition sind diese beiden Zeilen enthalten:
wxGrid *WxGrid1; wxGrid *WxGrid2;
Du leitest also keine Klasse von wxGrid ab. Das Problem dabei ist, das das Event
EVT_GRID_CELL_CHANGE(Projekt1Frm::WxGrid2CellChange)
nun immer aufgerufen wird, wenn irgendeine Zelle verändert wurde, da die Ids nicht angegeben wurden. Diese Events sind dafür gedacht, sie einzusetzen, wenn du eine Klasse von wxGrid ableitest. Die Version mit Ids heißt:
EVT_GRID_CMD_CELL_CHANGE (ID_WXGRID2, Projekt1Frm::WxGrid2CellChance)
. Alternativ kannst du auch statt einem Evt Table ein Connect verwenden:
WxGrid2->Connect (EVT_GRID_CELL_CHANGE, wxGridEventHandler (Projekt1Frm::WxGrid2CellChange)); //Nicht ueberprueft!
Die einfachste Möglichkeit wäre wohl, die entsprechende Zeile im Quelltext zu ändern, allerdings weiß ich auch nicht, wie sich das mit wxDev-C++ verträgt.
Und so als kleine Tipps:
Wenn du neu in wxWidgets bist solltest du erstmal kleine Projekte "von Hand" schreiben, anstatt gleich einen Designer zu verwenden. Ein gutes Tutorial in Englisch gibt es hier : http://zetcode.com/tutorials/wxwidgetstutorial/. Ich arbeite gerade zwischenzeitlich an einem eigenen wxWidgets Tutorial in deutsch, das wird aber leider noch etwas dauern.
Außerdem musst du deine Widgets (Elemente) im Fenster nicht Pixelgenau angeben, sondern kannst dafür einen Kontainer wie einen Sizer verwenden, der dir die Aufgabe der Positionierung und Größenveränderung abnimmt.MfG
Yoschi
-
So, jetzt klappt es. Vielen Dank Yoschi !
Ich habe das Grid-Problem mit dem Evt Table gelöst. Ich weis zwar noch nicht recht, warum der Designer von wxDev-C++ falschen Code einsetzt, aber jetzt kann ich an meinem eigendlichen Projekt weiterarbeiten. Und das Tutorial werd ich bei Gelegenheit mir auch mal ansehen. Nochmals vielen Dank und viel Erfolg bei deinem eigenen wxWidgets-Tutorial.
MfG
Koprom