Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   TObjectlist Problem mit index (https://www.delphipraxis.net/126220-tobjectlist-problem-mit-index.html)

khh 20. Dez 2008 09:16


TObjectlist Problem mit index
 
Hallo zusammen,
ich habe eine

Tanredenlist vom Type TObjectlist.

bei der Anredenliste handelt es sich um eine kleine Liste, ich möchte das Prinzip aber auch für andere, grössere Listen und Objekte nutzen.

In einer Schleife im constructor der Liste lese ich die Objekte ein:

Fanreden := Tanreden.create(NIL);
self.add(Fanreden);

Fanreden beinhaltet id, bezeichnung , usw.
wenn ich ( zum test)in der schleife auf die Objekte zugreife funktioniert das wunderbar:

ShowMessage(Tanreden(self.items[i]).Bezeichnung);

jetzt möchte ich eine Instanz der Tanredenliste an eine Combobox übergeben:
also erzeuge ich :

Delphi-Quellcode:
 Fanredenlist := Tanredenlist.create(NIL);
  for i:=0 to Fanredenlist.count-1 do
begin
   myForm.AnredeCombobox.Items.AddObject(Tanreden(Fanredenlist.items[i]).Bezeichnung, Tanreden(Fanredenlist.items[i]));
end;
Leider bekomme ich so nur die Bbezeichnung des letzten Satzes in die Combobox, und das 'count-mal'

was mache ich falsch ?

danke Gruss KH

DeddyH 20. Dez 2008 09:22

Re: TObjectlist Problem mit index
 
Wenn TAnredenlist wirklich vom Typ TObjectlist ist, hat der Constructor einen Boolean-Parameter namens OwnsObjects und keinen TObject-Parameter. Vielleicht zeigst Du uns mal den ganzen Constructor, dann kann man evtl. eher etwas erkennen.

khh 20. Dez 2008 09:31

Re: TObjectlist Problem mit index
 
Delphi-Quellcode:

constructor Tanredenlist.Create(AOwner:TPersistent);
 var
 anzds , i: integer;

 begin
   inherited Create;
  // Fanreden ist vom Typ Tanreden = class(TPersistent)
     Fanreden := Tanreden.create(NIL);
    // in Fanreden.anzds stehen die anzahl der ds in der DB
     anzds := Fanreden.anzds;
     for i:= 0 to anzds -1 do
     begin
     Fanreden.anreden_id := i +1 ;
    // liest die ds aus der db und übergibt sie dem Object Fanreden
     Fanreden.DSlesen ;
     self.add(Fanreden);
 
   //  ShowMessage(Tanreden(self.items[i]).Bezeichnung);
     end;
   end;
EDIT:
Type
Tanredenlist = class(TObjectList)

DeddyH 20. Dez 2008 09:33

Re: TObjectlist Problem mit index
 
Du erzeugst ja auch nur ein einziges Objekt FAnreden und überschreibst das immer wieder.

khh 20. Dez 2008 09:35

Re: TObjectlist Problem mit index
 
Zitat:

Zitat von DeddyH
Du erzeugst ja auch nur ein einziges Objekt FAnreden und überschreibst das immer wieder.

ach sooo

ich dachte ich kann über einen index daruf zugreifen :wall:

das heisst ich muss in der schleife mehrere objecte erzeugen?
wie ist danndie syntax?

DeddyH 20. Dez 2008 09:41

Re: TObjectlist Problem mit index
 
Hier einmal ein Auszug aus meinem aktuellen Projekt (ich hoffe, da ist mir jemand jetzt nicht böse ;)):
Delphi-Quellcode:
  with TFBLParamDsql.Create(nil) do
    try
      //...
      SQL.Text := Format(sSQL,[FTablename]);
      ExecSQL;
      while not eof do
        begin
          ASalutation := TSalutation.CreateNew(FDatabase);
          ASalutation.FID := FieldByNameAsInteger('ID');
          ASalutation.FTitle := FieldByNameAsString('Bezeichnung');
          self.Add(ASalutation);
          Next;
        end;
      Close;
    finally
      Transaction.Commit;
      Free;
    end;

khh 20. Dez 2008 09:44

Re: TObjectlist Problem mit index
 
ich danke dir

Gruss Kh

khh 20. Dez 2008 09:49

Re: TObjectlist Problem mit index
 
trotzdem nochmal ne frage:
so:
self.Add(ASalutation); oder eben so:
self.add(Fanreden);

haben dann ja alle objekte den gleichen namen.

wie sieht dann die syntax aus, wenn ich die Objekte in der Instanz an die Combobox übergeben möchte ?

EDIT: ok die systax wie ich sie in der Instanz habe passt.

khh 20. Dez 2008 09:55

Re: TObjectlist Problem mit index
 
dann muss ich ja auch irgendwie wieder an die id des in der Box ausgewählten Eintrags kommen.

geht das irgendwie einfacher?

DeddyH 20. Dez 2008 09:57

Re: TObjectlist Problem mit index
 
Du hast jetzt alle Objekte in der ComboBox, oder? An das entsprechende Objekt kommst Du doch dann über den ItemIndex der ComboBox.

khh 20. Dez 2008 10:00

Re: TObjectlist Problem mit index
 
Zitat:

Zitat von DeddyH
Du hast jetzt alle Objekte in der ComboBox, oder? An das entsprechende Objekt kommst Du doch dann über den ItemIndex der ComboBox.

stimmt,


ich danke dir vielmals


Gruss KH

DeddyH 20. Dez 2008 10:02

Re: TObjectlist Problem mit index
 
Zur Verdeutlichung noch ein Codeschnippsel (mit einer List- statt einer ComboBox, aber ist ja egal):
Delphi-Quellcode:
procedure TfrmStammdaten.btnDeleteSalutationClick(Sender: TObject);
begin
  if lbSalutations.ItemIndex > -1 then
    case TSalutation(lbSalutations.Items.Objects[lbSalutations.ItemIndex]).Delete of
        dtOK: begin
                TSalutation(lbSalutations.Items.Objects[lbSalutations.ItemIndex]).Free;
                lbSalutations.DeleteSelected;
              end;
     dtError: MessageBox(Handle,'Beim Löschen ist ein Fehler aufgetreten.',
                         nil,MB_OK or MB_ICONERROR)
    end;
end;

Sharky 20. Dez 2008 10:02

Re: TObjectlist Problem mit index
 
Hai khh,

bitte nutzte doch zum ergänzen deiner Beiträge die Edit-Funktion. Solange noch kein neue Anwort gekommen ist musst Du nicht für jede weitere Info/Frage einen neuen Beitrag erzeugen.

Danke.

khh 20. Dez 2008 10:18

Re: TObjectlist Problem mit index
 
Zitat:

Zitat von Sharky
Hai khh,

bitte nutzte doch zum ergänzen deiner Beiträge die Edit-Funktion. Solange noch kein neue Anwort gekommen ist musst Du nicht für jede weitere Info/Frage einen neuen Beitrag erzeugen.

Danke.

ok, mach ich

danke für die info


Gruss Kh


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 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