SaveDialog alle Listen eines PageControl speichern?
-
Hallo,
Ich stimme junix zu. Allerdings ist mir bei groben anschauen gleich am Anfang etwas aufgefallen
Hier:TListView* Tfrm_main::GetListView (TTabSheet* pTabSheet) { return (TListView*)pTabSheet->FindChildControl(""); }
FindChildControl sucht nach einem Control mit dem angegebenen Namen und gibt dann einen Pointer zurück oder NULL wenn es nichts gefunden hat.
Hier gibt es mehrer Probleme
1. du übergibst keinen Namen
2. du testet nicht auf NULL
3. durch den (nicht zu verwendenden C-cast) kannst du nicht prüfen ob das Control vom Typ TListView istEs gibt hier sicher noch mehr.
Schau mal selber gründlich nach.Ciao
-
Also zwei Fehler...
EConvertError und EListError
@Braunstein
also ich verwende diese Funktion ja in mehreren Fällen und da Funzt sie
-
0Bytes schrieb:
Also zwei Fehler...
EConvertError und EListError
Zum Glück gibts da keinen näheren Informationen zur Klasse des fehlers... Sonst würden wir ja den fehler viel zu schnell finden... und wo bitte treten die Fehler auf? (Zeile?!?)
-junix
-
0Bytes schrieb:
Also zwei Fehler...
EConvertError und EListError
sieh doch noch mal an, was Braunstein geschrieben hat.
-
also die Fehler
kommt in der inneren for Schleifeich hab es mir angesehn, aber warum funktionierts mit "" bei den anderen Funktionen und Schleifen und hier ausgerechnet nicht
-
@0Bytes
Je länger ich mir deinen Quelltext anschaue destso verworrener erscheint er mir. Was steht denn in deinen ListViews drin? Wiso holst du dir den Pointer ListView zweimal (mal abgesehen davon das das kein Pointer auf ListView sein muss?for (int y = 0; y < PageControl1->PageCount; y++) { // hier holst deinen Pointer TListView* pListView = GetListView(PageControl1->Pages[y]); // jetzt kommt die Schleife über die Elemente des ListView for (int i = 0; i < pListView->Items->Count; i++) { //hier holst du einen neuen Pointer aus einer Page mit dem Index der über ListView->Count läuft ??? pListView = GetListView(PageControl1->Pages[i]); pListViewList->Add(pListView->Items->Item[i]->Caption + "| " + \ pListView->Items->Item[i]->SubItems->Text + "|| "); } }
schon sehr merkwürdig
-
Hey Supa
der Zweite Pages[] muss natürlich auch ein 'y' rein
Danke das war es
-
Wozu überhaupt zweimal den Selben pointer holen?
Ahja und btw. Hättest du den von mir verlinkten Artikel gelesen und den Link in jenem Artikel ebenfalls angeschaut und die dort beschriebenen Ratschläge befolgt hättest du schon längst selbst drauf kommen können...
Ich durchsetze meine Beiträge nicht aus Spass an der Freude mit links...
-junix
-
Ja gut ich hab Deinen Link übersehn ...Sorry.
Nun aber doch noch eine Frage...
kann es sein das zB. 200-300 Listeneinträge zu viel sind...nun bricht er beim 3 oder 4 mal durchlaufen der inneren for Schleife ab
mit EListError - Speichermangel! ab.gibt es eine Begrenzung für TStringList?
-
So die Lösung, man bin ich blöde
void __fastcall Tfrm_main::CmdSaveAllListViewToFile() { bPlay = false; TStringList* pListViewList = new TStringList(); for (int y = 0; y < PageControl1->PageCount; y++) { TListView* pListView = GetListView(PageControl1->Pages[y]); for (int i = 0; i < pListView->Items->Count; i++) { pListView = GetListView(PageControl1->Pages[y]); pListViewList->Add(pListView->Items->Item[i]->Caption + "| " + \ pListView->Items->Item[i]->SubItems->Text + "|| "); } if (SaveDialog1->Execute()) { SaveDialog1->Title = " Alle Fenster speichern..."; pListViewList->SaveToFile(SaveDialog1->FileName); pListViewList->Clear(); } } delete pListViewList; bPlay = true; }
man sollte halt die liste auch leeren damit sie einem den Speicher nicht zu ballert
naja aus fehlern lernt man...
Cya bis zum nächsten Problem