Problem beim Auslesen der ersten Spalte aller Einträge im ListCtrl...



  • Hallo,

    ich möchte in einem CListCtrl den Inhalt der ersten Spalte von "allen" Einträgen auslesen ! Doch irgendwie funtzt mein Code nicht, obwohl er richtig ist...oder habe ich etwas vergessen ??? 😕

    CListCtrl* pList = (CListCtrl*) GetDlgItem(IDC_LIST1);
    
    	for (int i = 0; i <= pList->GetItemCount(); i++);
    	{	
    		CString n = pList->GetItemText(i,0);
    		AfxMessageBox(n);
    	}
    

    Danke für Fehlerberichterstattung 😉

    :: NoName ::



  • abgesehen von dem <= (sollte nur < sein weil nur von 0 bis n-1 laufen) siehts richtig aus



  • Wo liegt denn das Problem???

    Läßt sich das Programm nich kompilieren, oder bricht die Schleife direkt ab oder steht in CString n nichts drin???



  • Das Problem ist, dass in CString n nix drin steht ! Die MessageBox ist leer ...

    @Windalf
    Auch ohne "=" funtzt es nicht ...



  • aber es macht es schon x mal? sprich sooft wie was drinnen steht? z.b. 20 mal



  • Servus,

    wenn der Code dort oben eine Kopie deines Codes ist, dann sollte man dich vierteilen, steinigen und auspeitschen... 😃 *prügel*

    for (int i = 0; i <= pList->GetItemCount()-1; i++) //;
    {    
        CString n = pList->GetItemText(i,0); 
    }
    

    Nimm das Semikolon ";" hinter dem Kopf der For-Schleife weg und setze noch ein GetItemCount()-1. dann stimmts 😃

    *winke*
    Hellsgore



  • Danke Hellsgore, so funtzt es ... Aber kannst du mir erklären wozu diese -1 dienen soll ? denn ohne der funtzt es auch...



  • Servus,

    ⚠ Achtung ⚠

    Es folgt eine Erklärung. Bei Risiken oder Nebenwirkungen, stecken Sie bitte Ihren Finger ins Ohr und laufen Sie singend auf die Straße.

    Bsp.:

    Count = 4;
    for (int i = 0; i <= Count()-1; i++)
    for (int i = 0; i < Count(); i++)

    Hier zählst du von Element 0 - 3 entsprechen dem Index des ListCtrl

    Count = 4
    for (int i = 0; i <= Count(); i++)

    Hier zählst du von 0 - 4 = 5 Schritte aber du hast nur 4 Elemente. Dann kann es passieren das er die bei dem letzten Schritt, in dem Fall i = 4, höllisch abraucht.

    Ich hoffe ich konnte dir das einigermaßen erklären 😃

    *winke*
    Hellsgore



  • bin mir jetzt nicht so sicher

    z.b. es sind 20 zeilen
    getcount liefert 20

    int i geht von 0...19 ( also mal mal )

    du schreibst <= ( also inclusive 20 )
    jetzt greifst du beim letzten mal von i ( i = 20 )

    CString n = pList->GetItemText(20,0); // duerfte nicht gehen da das letze 19 ist

    also musst du entweder

    nicht <= machen sondern nur < oder halt die -1

    so wie du es machst ist es falsch.



  • Hab verstanden Hellsgore !Super Erklärung! 😃

    Thx



  • Da gibt es noch ein kleines Prob. Wenn ich jetzt CString n in eine Datei speichern möchte, dann wird nur der erste Eintrag vom List Control gespeichert und nicht alle ...

    for (int i = 0; i <= pList->GetItemCount()-1; i++)
    	{
    			CStdioFile OutFile; 		
    			OutFile.Open("C:\\List.dat",CFile::modeCreate | CFile::modeWrite);
    			CString n = pList->GetItemText(i,0);
    			OutFile.WriteString(n);
    			OutFile.Close(); 				
    	}
    

    Was mache ich falsch...



  • bitte schreib das mode create und so vor der for schleife da du die
    datei oeffnest und dann reinschreibst
    im nechsten schritt oeffnest wieder und loescht sozusagen die datei vorher

    ich habs sogemacht ungefaehr da ich nciht den ganzen code poste, da ichs bissle anders mache

    int max = m_testsuite.GetItemCount();
    
    	CStdioFile fDatei(getname, CFile::modeWrite);
    					CString line;
    					line = "\n";
    					unsigned int row = 0;
    
    					while(max != 0)
    					{
    
    max--;
    }
    
    am schluss dann closen
    fDatei.Close();
    


  • Danke so klappt es super ! 😃


Anmelden zum Antworten