Einzelnen Beitrag anzeigen

torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#7

Re: Komponenten dynamisch erzeugen = ok, free = nicht ok

  Alt 16. Mär 2005, 12:27
Ich habe beim Debuggen noch herausbekommen, dass obwohl mindestens 3 Komponenten auf der Scollbox vorhanden sind der scr_dbfields.parent.ComponentCount = 0 ist. Kann es sein, dass die Obejkte nicht korrekt als Childs zugewiesen werden und dadurch die Probleme entstehen?

Zumindest habe ich nun die Prozedur zum Erstellen so abgeändert, dass der Count hinhaut und das die Controls dem scr_dbfields als Childs zugewiesen werden.

Delphi-Quellcode:
procedure TForm1.TrytoCreateDBFields;
var
  i:integer;
  DBEdit:TDBEdit;
  Labels:TLabel;
  scr_dbfields:TScrollBox;
begin
  scr_dbfields.Free;
  scr_dbfields := TScrollbox.Create(TabSheet7);
  scr_dbfields.Parent:=TabSheet7;
  scr_dbfields.Align:=alClient;

  with scr_dbfields do begin
   for i:=0 to Table1.FieldCount-1 do
     begin
       case Table1.Fields.Fields[i].DataType of
         ftString,ftInteger, ftAutoInc, ftSmallint, ftFloat,ftWord :
         begin
          //label erzeugen
          Labels:= TLabel.Create(scr_dbfields);
          Labels.Parent := scr_dbfields;
          Labels.Left :=10;
          Labels.Width:=85;
          Labels.Alignment:=taRightJustify;
          Labels.Top := (i * 30)+3;
          Labels.Caption:=Table1.FieldList.Strings[i];
          //dbfeld erzeugen
          DBEdit:= TDBEdit.Create(scr_dbfields);
          DBEdit.Parent := scr_dbfields;
          DBEdit.Left :=100;
          DBEdit.Top := i * 30;
          DBEdit.DataSource:=DataSource1;
          DBEdit.Name:=Table1.FieldList.Strings[i];
          DBEdit.DataField:=Table1.FieldList.Strings[i];
          ShowMessage(inttostr(scr_dbfields.ComponentCount))
        end;
       end;
     end;
  end;
end;
Trotzdem kommt immer noch die Fehlermeldung, dass er das letzte DB-Feld nicht finden kann.
Danke
Tom
  Mit Zitat antworten Zitat