dynamische Komponente löschen
-
Hallo,
mit
NewSb.Length++; NewSb[SbCount] = new TSpeedButton(this); NewSb[SbCount]->AllowAllUp = true; NewSb[SbCount]->GroupIndex = SbCount + 1; NewSb[SbCount]->Caption = vasBaQueryTitel[SbCount]; .... NewSb[SbCount]->OnClick = NewSbOnClick; NewSb[SbCount]->Parent = GroupBoxProzessFunktion;erstelle ich während der Laufzeit in unterschiedlicher Anzahl SpeedButton. Je nach Code, werden die SpeedButton mit
if (SbCount > 0) { for (int i=0; i<SbCount; i++) { delete NewSb[i]; } SbCount = 0; }vor dem neu erstellen gelöscht. Wie bekomme ich die genaue Anzahl der SB heraus ? Ich möchte dies ungern von dem "SbCount" ableiten. NewSb.Length liefert mir immer die maximal ertellte Anzahl der SB zurück.
bis bald Siegfried

-
Hallo,
Ist dein Feld ein DynamicArray?
Ansonsten ist doch die Anzahl deiner Speedbuttons Length-SbCount. Eine andere Variante wäre die Pointer nach den Löschen auf NULL zu setzen und dann zu zählen (recht umständlich).
Desweiteren könntest du nach dem Löschen die gültigen Pointer in ein neues Array korrekter Länge kopieren.Ciao
-
hallo,
in der .h ist folgendesDynamicArray<TSpeedButton*> NewSb;wenn ich z.B. beim 1 Aufruf 22 SB erstellt habe, dann im 2 Aufruf 100 Sb und im 3 Aufruf 50 SB bekomme ich beim Auslesen mit "NewSb.Length" nach dem 3 Aufruf 100 zurückgemeldet. Geht dies überhaupt mit diesem Code ?
bis bald Siegfried
-
Wenn du die Länge deines Arrays nicht zurücksetzt, bekommst du natürlich 100 heraus. Du löschst doch vor dem Anlegen alle SpeedButtons?
Dann mußt du einfach nach dem Anlegen immer die Länge entsprechend einstellen.
-
Hallo,
ja, bevor Sb ein 2,3, .. mal angelegt sollen und werden werden diese gelöscht.
ist dieses so richtig ?int iSize = NewSb.Length; if (iSize > 0) { for (int i=0; i<iSize ; i++) { delete NewSb[i]; } SbCount = 0; NewSb.Length = 0; }bis bald Siegfried
-
eigentlich schon.
Was macht dieses SbCount eigentlich?
Ich persönlich verwende DynamicArray nie. Ich finde std::vector wesentlich komfortabler. Vielleicht schaust du da mal nach. Ist aber Ansichtssache.
-
Hallo,
SbCount wird beim erstellen der SB benutzt. dieser Code "SbCount += 1;" fehlt im ersten Beispiel. std::vector in verbindung mit TSpeedButton kenne ich noch nicht. Arbeite bereits mit std::vector und int, Ansistring. Dies geht sehr gut.bis bald Siegfried

-
vector kann doch beliebige Typen aufnehmen (sofern CopyCtr vorhanden), also auf jedem Fall auch einen Pointer auf ein SpeedButton. Nur für das Löschen bist du (wie auch bei DynamicArray) selbst verantwortlich).
-
Hallo,
werde dies bei den nächsten Code einmal verwenden.
Vielen Dank für die Hilfe
bis bald Siegfried
