AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Komponenten wieder freigeben

Ein Thema von barnti · begonnen am 12. Jan 2004 · letzter Beitrag vom 12. Jan 2004
Antwort Antwort
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#1

Komponenten wieder freigeben

  Alt 12. Jan 2004, 10:06
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#2

Re: Komponenten wieder freigeben

  Alt 12. Jan 2004, 10:10
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 ??!
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Komponenten wieder freigeben

  Alt 12. Jan 2004, 10:15
Hi,
leider keine Änderung...

Weitere Tips?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#4

Re: Komponenten wieder freigeben

  Alt 12. Jan 2004, 10:20
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#5

Re: Komponenten wieder freigeben

  Alt 12. Jan 2004, 10:22
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.
gruß, choose
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Komponenten wieder freigeben

  Alt 12. Jan 2004, 10:36
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
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#7

Re: Komponenten wieder freigeben

  Alt 12. Jan 2004, 10:43
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.
gruß, choose
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Komponenten wieder freigeben

  Alt 12. Jan 2004, 11:34
Hi choose,

jo gutes Stichwort! Ich überarbeite meinen Quellcode regelmäßig. Bei der Gelegenheit korrigiere ich solche Sachen dann...

Ciao,

Barnti
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:53 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