also folgendes Problem: Ich möchte, wenn ich auf Datei->Neu gehe alle Listenfeldeinträge löschen. Habe deshalb in der Doc die Methode DeleteContents() angelegt. Habe mir halt einen Zeiger auf die View besorgt: POSITION pos=GetFirstViewPosition(); CTestView* pView=(CTestView*)GetNextView(pos); und dann einen Zeiger auf das Listenfeld und in einer Schleife einfach gelöscht. Das funktioniert auch ohne Probleme. Also die Einträge sind weg. Aber wenn ich das Programm verlasse kommt ein Speicherfehler. Hat zwar keine Auswirkungen, aber sehr toll sieht das auch nicht aus. Woran kann das liegen???
Ich schätze mal das du vergessen hast irgendwo einen Pointer freizugeben, welchen du mit new/malloc angelegt hast. Warum löscht du aus dem Listenfeld nicht einfach per RemoveAllItems()/ResetContent()/o.ä? -- class God : public ChuckNorris { };
also mit ResetContent() wird auch alles gelöscht, aber der Speicherfehler kommt immer noch am Ende. Und den Zeiger auf die View kann man nicht mit delete löschen. Sobald man den Zeiger auf die View auskommentiert ist der Fehler weg. Aber der Punkt Datei->Neu funktioniert halt nicht mehr. Gibt es da vielleicht ne andere Möglichkeit auf die View zuzugreifen???
void CTestDoc:eleteContents() { // TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen POSITION pos=GetFirstViewPosition(); CTestView* pView=(CTestView*)GetNextView(pos);//Zeiger aufView
//Zeiger auf Listenfeld1 CListBox* pListBox=(CListBox*)pView->GetDlgItem(IDC_LIST1); pListBox->ResetContent(); //Methode zum löschen des CObArray Dateifeld pView->DeleteDateifeld();
//Das gleiche Prinzip bei den anderen Listfeldern, Dahinter liegt immer // ein CObArray wo die Werte reingeschafft werden pListBox=(CListBox*)pView->GetDlgItem(IDC_LIST2); for(int j=0;j<m_Serverfeld.GetSize();j++) m_Serverfeld.RemoveAt(j); m_Serverfeld.RemoveAll(); pListBox->ResetContent();