[wx] Item in wxListCtrl einfügen klappt nicht!
-
Hallo,
mein Programm beinhaltet eine simple wxListCtrl Tabelle, der ich mehrere Spalten zugewiesen habe. Nun möchte ich die Tabelle in einer Schleife Spalten sowie -zeilenweise befüllen, es handelt sich um Strings. Jedoch scheitere ich daran, egal ob ich InsertItem () oder SetItem () anwende. Folgendes habe ich bereits probiert:
// Die seperator-Funktion zerlegt die eingelesene Zeile in Token, nicht weiter wichtig. std::ifstream in (path.c_str ()); if (in.good ()) { while (!in.eof ()) { std::getline (in, TempLine); for (short i=1; i<19; i++) { WxListCtrl1->InsertItem (line, (seperator (TempLine, ';', i)).c_str ()); } line++; } }
Das selbe habe ich dann auch mit SetItem gemacht (natürlich mit entsprechender Parameterübergabe). Aber entweder es wurde nur in der ersten Spalte etwas eingefügt (bei der InsertItem Variante), oder es passierte garnichts (bei SetItem). Ich habe mir auch bereits das wxWidgets Beispiel zu ListCtrl angeguckt, jedoch werde ich wegen des doch recht großen Beispielumfangs nicht ganz schlau. Kann mir jemand bitte die Lösung nennen? Danke!
-
Also ich bin kein Experte und habe auch noch nich mit ListItem gearbeitet aber in nem Beispiel habe ich es so interpretiert, dass du mit InsertItem eine Zeile hinzufügst (1. Spalte) und dann mit SetItem die anderen Spalten hinzufügen kannst:
long SetItem(long index, int col, const wxString& label, int imageId = -1)
Sets a string field at a particular column.
-
Kenn mich mit wxListCtrl nicht aus, und würde auch von seiner (durchaus komplizierten) Verwendung abraten.
wxListCtrl ist afaik auch Windowspezifisch, da es sich hier um eine Abbildung des ListCtrl handelt (CListCtrl in der MFC).wxGrid kann häufig eine Alternative sein, ansonsten gibt es noch wxSheet auf wxcode.sourceforge.net.
-
wxListCtrl ist nicht win-spezifisch. In den Docs (2.8.6) steht jedenfalls nix davon, aber eine Notiz für Mac
@TE Hast du dir mal das Sample angekuckt? Ich kann jetzt so keinen Fehler sehen. Vllt steckt der Fehler ja woanders.
rya.
-
Hallo,
danke für die Antworten.
phlox81 schrieb:
Kenn mich mit wxListCtrl nicht aus, und würde auch von seiner (durchaus komplizierten) Verwendung abraten.
Die Verwendung ist vielleicht nicht besonders kompliziert, aber total verwirrend. Ich weis jetzt immernoch nicht, was der Unterschied zwischen SetItem und InsertItem sein soll, bzw. ich kann es nur erahnen. Danke für deine genannten Alternativen, werde ich bei Bedarf gerne darauf zurückgreifen.
Scorcher24 schrieb:
@TE Hast du dir mal das Sample angekuckt? Ich kann jetzt so keinen Fehler sehen. Vllt steckt der Fehler ja woanders.
Wie schon geschrieben, habe ich mir das Sample angeguckt. Zwar hat der Umfang einer solchen Beispielanwendung schon einige Vorteile, im Gegenzug allerdings den großen Nachteil, dass sich kein Schwein mehr auskennt darin, ausser man studiert den Code erstmal ne halbe Stunde lang.
Und die Daten, die ich in die Tabelle eintragen möchte, sind völlig korrekt, und in keinster Weise korrupt. Der Fehler liegt eindeutig am Einfügen des Strings. Was ich aber lustiges herausgefunden habe, ist, dass das folgende Einfügen klappt (Die benötigten Spalten wurden zuvor mit SetColumn natürlich gesetzt), und ProcessViewCtrl ist eine Instanz von wxListCtrl:
for (unsigned int i=0; i<10; i++) { ProcessViewCtrl->InsertItem (i, "Spalteninhalt 1", -1); ProcessViewCtrl->SetItem (i, 1, "Spalteninhalt 2", -1); ProcessViewCtrl->SetItem (i, 2, "Spalteninhalt 3", -1); ProcessViewCtrl->SetItem (i, 3, "Und so weiter...", -1); }
So wird die komplette Tabelle nach unten hin ausgefüllt. Mir fällt gerade ein, dass ich es auf mein oben genanntes Problem trotzdem nach diesem Muster anwenden könnte, jedoch müsste ich jeden Spalteninhalt einzeln per SetItem () eintragen, und es ist keine saubere Lösung, da es ziemlich viele Spalten sind. Trotzdem ein Dankeschön an euch!