Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Komponenten wieder freigeben (https://www.delphipraxis.net/14595-komponenten-wieder-freigeben.html)

barnti 12. Jan 2004 10:06


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:
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;
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:

Delphi-Quellcode:
// 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;
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".

Wie kann ich die erzeugten TDBEdits wieder entfernen? Mir ist nicht klar warum das so nicht funktioniert?

Danke für eure Hilfe,

Gruß,

Barnti

himitsu 12. Jan 2004 10:10

Re: Komponenten wieder freigeben
 
Versuchs mal so (ein ähnliches Problem gab es hier schon mal)
Delphi-Quellcode:
// 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;
[add]
Componenten freigeben... Laufzeitfehler ??!

barnti 12. Jan 2004 10:15

Re: Komponenten wieder freigeben
 
Hi,
leider keine Änderung...

Weitere Tips?

himitsu 12. Jan 2004 10:20

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;

choose 12. Jan 2004 10:22

Re: Komponenten wieder freigeben
 
Hallo barnti,

dieser Code sollte funktionieren.
Delphi-Quellcode:
i:= 0;
while i<ComponentCount do
  if Components[i] is TDBEdit then Components[i].Free
  else Inc(i);
Die Erläuterung findest Du in diesem Posting zu einem ähnlichen Problem.

barnti 12. Jan 2004 10:36

Re: Komponenten wieder freigeben
 
Hi,

so gehts. Danke Leute! Danke Choose. Werde jetzt versuchen das ganze als

Delphi-Quellcode:
i:= 0;
while i<DBGrid.parent.ComponentCount do
  if DBGrid.parent.Components[i] is TDBEdit then DBGrid.parent.Components[i].Free
  else Inc(i);
zu implementieren, so dass nicht über alle Komponenten iteriert werden muss. Ich weiß ja wo meine Komponente zu finden ist.

Gruß,

Barnti

choose 12. Jan 2004 10:43

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.

barnti 12. Jan 2004 11:34

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 03:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz