![]() |
Komponenten wieder freigeben
Hallo alle!
Ich habe ein Panel, welches zur Designzeit ein DBGrid enthält. Zur Laufzeit füge ich die folgenden Komponenten hinzu:
Delphi-Quellcode:
Was mir ein TDBEdit-Feld erzeugt, dass im Panel "enthalten" ist. Auf Knopfdruck soll nun dieses TDBEdit wieder entfert werden. Dazu bediene ich mich des folgenden:
Edit:= TDBEdit.Create(DBGrid.Parent);
Edit.Parent:= DBGrid.Parent; // Zuweisen des Namens aus dem Spaltennamen der abgefragten Tabelle Edit.Name:= DBGrid.DataSource.Name+'_'+DBGrid.Fields[count].FieldName;
Delphi-Quellcode:
Leider weden die Komponenten nicht entfernt. Bei einem erneuten erzeugen des TDBEdit-Feldes erhalte ich deshalb die Fehlermeldung "Eine Komponente mit dem Namen ... existiert bereits".
// Entferne alle TDBEdits, die im Panel "enthalten" sind
for i:=0 to DBGrid.Parent.ComponentCount -1 do if (Components[i] is TDBEdit) then Components[i].Free; Wie kann ich die erzeugten TDBEdits wieder entfernen? Mir ist nicht klar warum das so nicht funktioniert? Danke für eure Hilfe, Gruß, Barnti |
Re: Komponenten wieder freigeben
Versuchs mal so (ein ähnliches Problem gab es hier schon mal)
Delphi-Quellcode:
[add]
// Entferne alle TDBEdits, die im Panel "enthalten" sind
for i := DBGrid.Parent.ComponentCount - 1 downto 0 do if (Components[i] is TDBEdit) then Components[i].Free; ![]() |
Re: Komponenten wieder freigeben
Hi,
leider keine Änderung... Weitere Tips? |
Re: Komponenten wieder freigeben
Noch ein anderer Fehler:
Form1.Components[i] <> DBGrid.Parent.Components[i] (ich arbeite nicht mit DatenBanken, also die Richtung ist schon richtig, aber es muß nicht unbedingt 100% richtig sein)
Code:
// Entferne alle TDBEdits, die im Panel "enthalten" sind
for i := DBGrid.Parent.ComponentCount - 1 downto 0 do if ([b]DBGrid.Parent.[/b]Components[i] is TDBEdit) then [b]DBGrid.Parent.[/b]Components[i].Free; |
Re: Komponenten wieder freigeben
Hallo barnti,
dieser Code sollte funktionieren.
Delphi-Quellcode:
Die Erläuterung findest Du in
i:= 0;
while i<ComponentCount do if Components[i] is TDBEdit then Components[i].Free else Inc(i); ![]() |
Re: Komponenten wieder freigeben
Hi,
so gehts. Danke Leute! Danke Choose. Werde jetzt versuchen das ganze als
Delphi-Quellcode:
zu implementieren, so dass nicht über alle Komponenten iteriert werden muss. Ich weiß ja wo meine Komponente zu finden ist.
i:= 0;
while i<DBGrid.parent.ComponentCount do if DBGrid.parent.Components[i] is TDBEdit then DBGrid.parent.Components[i].Free else Inc(i); Gruß, Barnti |
Re: Komponenten wieder freigeben
Hallo barnti,
schau mal in der OH unter dem Schlüsselwort with nach. Mit ihm ließe sich der Code etwas kompakter und übersichtlicher gestalten. |
Re: Komponenten wieder freigeben
Hi choose,
jo gutes Stichwort! Ich überarbeite meinen Quellcode regelmäßig. Bei der Gelegenheit korrigiere ich solche Sachen dann... Ciao, Barnti |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz