Schleife mit Dynamische Variablen bitte helfen!!!
-
CStringArray myArray; void CPADViewerDlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) { int CurSel = m_liste.GetSelectionMark(); // Spart die Schleife if (CurSel != -1) // Ist was gewählt? { //text des Selektierten Item holen und anzeigen for (int r=0;r<m_nSpaltenzahl;r++) { CString pageadress; pageadress = m_liste.GetItemText(CurSel,r); myArray.addString( pageaddress ); for (int e=0;e<1;e++) { // pageadress = m_liste.GetItemText(CurSel,r); //<-- Achtung, Index geändert MessageBox(pageadress); } //Anzeigen dlg; //dlg.breite = pageadress; //dlg.DoModal(); } } }
-
er laüft auf einige Fehler add String ist kein element von CStringarry
-
bumbumb1 schrieb:
er laüft auf einige Fehler add String ist kein element von CStringarry
Probier mal "add()". Bin leider grade zu Hause und hab kein Windows zur Hand (benutze Linux). (oder append(), appendString(), meistens so irgendwas)
-
muss ich oben noch was im header includen? Der fehler ist immer noch
-
bumbumb1 schrieb:
muss ich oben noch was im header includen? Der fehler ist immer noch
Na ja, wenn er sagt, "ist kein Element von CStringArray", dann kennt er CStringArray ja.
Du musst nur nachgucken, wie die Methode zum Einfuegen von Strings in das Array heisst. Probier mal append() oder appendString().
-
ne das geht auch nicht
-
Kann auch sein, dass Du den Anfangsbuchstaben gross schreiben musst, also z.B. "AddString()" statt "addString()" oder "Append()" statt "append()".
Hier noch eine andere Version mit der STL:
#include <string> #include <vector> typedef std::string String; typedef std::vector<String> StringVec; StringVec myArray; void CPADViewerDlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) { int CurSel = m_liste.GetSelectionMark(); // Spart die Schleife if (CurSel != -1) // Ist was gewählt? { //text des Selektierten Item holen und anzeigen for (int r=0;r<m_nSpaltenzahl;r++) { CString pageadress; pageadress = m_liste.GetItemText(CurSel,r); myArray.push_back( String( pageaddress.GetBuffer() ) ); for (int e=0;e<1;e++) { // pageadress = m_liste.GetItemText(CurSel,r); //<-- Achtung, Index geändert MessageBox(pageadress); } //Anzeigen dlg; //dlg.breite = pageadress; //dlg.DoModal(); } } }
-
schon besser aber er sagt halt error C2660: 'GetBuffer' : Funktion akzeptiert keine 0 Parameter
-
bumbumb1 schrieb:
schon besser aber er sagt halt error C2660: 'GetBuffer' : Funktion akzeptiert keine 0 Parameter
Aha, da sind wir ja schonmal weiter!
Sorry, aber meine MFC Kenntnisse sind nicht so toll -- ich guck immer in die Doku und vergess es dann wieder!
Lass mal ".GetBuffer()" weg, ich glaube CString hat einen "operator const char*()".
-
so jetzt geht es und wie bekomme ich die werte wieder heraus?
-
bumbumb1 schrieb:
so jetzt geht es und wie bekomme ich die werte wieder heraus?
Prima!
Was willst Du denn damit machen?
Normalerweise geht das so:
// also, wenn Du die Werte in einer Schleife wieder auslesen willst, als CString: int n = myArray.size(); for ( int i=0; i < n; ++i ) { String s = myArray[i]; CString cs( s.c_str() ); // verwende cs }
-
so das geht auch jetzt muss das alles noch in unterschiedliche Variablen gepackt werden die anhand er größe es Arrys erstellt werden müßen Wenn das Arry 20 Werte hat ebenötige ich auch 20 Variablen
-
bumbumb1 schrieb:
so das geht auch jetzt muss das alles noch in unterschiedliche Variablen gepackt werden die anhand er größe es Arrys erstellt werden müßen Wenn das Arry 20 Werte hat ebenötige ich auch 20 Variablen
Kannst Du so machen, aber kannst auch direkt auf das Array zugreifen.
Wenn Du einen bestimmten Index haben willst:
CString cs; if ( myArray.size() >= 1U ) cs = CString( myArray[0].c_str() ); // ... if ( myArray.size() >= 3U ) cs = CString( myArray[2].c_str() ); // usw.
"3U" bedeutet "3 vorzeichenlos", das brauchst Du wegen myArray.size(), das vorzeichenlose Werte liefert.
Wie gesagt, am besten waere, wenn Du erstmal C++ lernen wuerdest. C++ mit MFC zu lernen macht die Sache nur viel komplizierter... aber jedem das seine!
-- ich hab halt ohne MFC C++ gelernt!
-
aber wie geht das die Variablen dynamisch sind und anhand der arry größe erstellt werden
-
bumbumb1 schrieb:
aber wie geht das die Variablen dynamisch sind und anhand der arry größe erstellt werden
Das Array sind doch Deine dynamischen Variablen.
Ein Array ist wie eine Reihe von Schachteln, in die Du was reintun kannst. Was Du da reintust, bleibt auch da drin.
Wenn Du ein Array loeschen willst, z.B. um es neu aufzubauen, benutzt Du "myArray.resize(0)".
-
ok,
jetzt habe ich aber ein Listenelement mit die vielen Spalten (Spalte 1,Spalte 2 etc.) so jetzt soll der wert für die Spalte 2 aus dem Array geladen werden in die die liste geschrieben werden. Der Wert steht mal am anfang mal am ende des arryas.
-
bumbumb1 schrieb:
ok,
jetzt habe ich aber ein Listenelement mit die vielen Spalten (Spalte 1,Spalte 2 etc.) so jetzt soll der wert für die Spalte 2 aus dem Array geladen werden in die die liste geschrieben werden. Der Wert steht mal am anfang mal am ende des arryas.Also, wenn Du eine Tabelle hast, nimmst Du am besten ein Zweidimensionales Array, also z.B.:
#include <vector> #include <string> typedef std::string String; typedef String StringVec; typedef std::vector<StringVec> StringVecVec; StringVecVec mein2DArray; // v[Zeile][Spalte] liefert ein Element // mit v[Zeile].push_back( String( ... ) ); fuegst Du eine Spalte zu einer Zeile hinzu // mit v.push_back( ... ); fuegst Du eine Zeile hinzu
Du musst halt pruefen, wo Dein Wert im Array auftaucht, und ihn entsprechend auslesen.
Programmieren musst Du schon selber! :p
Und das erfordert es, die Materie wirklich zu verstehen, mit der man hantiert, das kann Dir niemand abnehmen. Wie gesagt, um z.B. ein Verstaendnis fuer grundlegende Programmablaeufe zu bekommen, solltest Du erstmal programmieren lernen, z.B. mit C++.
Die MFC ist fuer die Programmierung grafischer Oberflaechen geeignet, aber sie ist sehr komplex, und fuer Anfaenger moeglicherweise kaum verstaendlich.
Das faengt schon damit an, dass Du Dir Dein Array sparen kannst, weil Du die Daten direkt im ListView suchen kannst, das Dir die Daten liefert.
Du wirst kaum darum herum kommen, zu lesen, wie man ein ListView-Control bedient, und wie die MFC-Version davon zu bedienen ist. (Windows Platform SDK Dokumentation fuer ListView-Control, und MFC-Dokumentation fuer CListView etc.)
Das ListView-Control speichert die Daten ja selber, sonst koennte es sie gar nicht anzeigen.