![]() |
TComboBox.AddObject - Adressverletzung
Hallo Leute,
ich hab ein Problem mit diesem Code:
Delphi-Quellcode:
An der makierten Stelle bekomme ich eine Adressverletzung. Ich habe schon eine Idee wodran es liegt. Und zwar habe ich mal probiert den ItemIndex in der vorletzten Zeile auf das letzte Item zu legen (ItemIndex := Items.Count-1). Und siehe da, beim letzten angehängten Objekt funktioniert es. Die davor scheinen nicht mehr zu exisitieren.
for i:=0 to 9 do
begin preisliste := TPreisliste.Create(); preisliste.Preisgruppe := dm.smtPreislisten.FieldByName('NR').AsString; preisliste.Jahr := dm.smtPreislisten.FieldByName('JAHR').AsString; preisliste.Periode := dm.smtPreislisten.FieldByName('PERIODE').AsString; combobox.Items.Add(dm.smtPreislisten.FieldByName('DATUM_VON').AsString); combobox.Items.AddObject('Preisliste'+IntToStr(i),preisliste); dm.smtPreislisten.Next; end; combobox.ItemIndex := 0; ShowMessage(TPreisliste(combobox.Items.Objects[combobox.ItemIndex]).Preisgruppe); <-- Überschreibe ich also bei jedem Schleifenbeginn das letzte Objekt? Wird nicht nur eine "Kopie" des Objekts in der Combobox hinterlegt? Gruß, Matthias |
AW: TComboBox.AddObject - Adressverletzung
Delphi-Quellcode:
erzeugt einen Eintrag bei Items ohne angehängtes Objekt.
combobox.Items.Add(dm.smtPreislisten.FieldByName('DATUM_VON').AsString);
Delphi-Quellcode:
erzeugt einen Eintrag bei Items mit angehängtem Objekt.
combobox.Items.AddObject('Preisliste'+IntToStr(i),preisliste);
Das heißt, dass jeder 2. Itemeintrag ein Objekt besitzt (1,3,5,...). Der Item mit dem Index 0 hat kein angehängtes Objekt, deswegen Fehler. |
AW: TComboBox.AddObject - Adressverletzung
Achso, dann hab ich das Prinzip schon falsch verstanden.
Ich dachte combobox.Items.Add fügt mir den "sichtbaren" Eintrag in die Combobox und Items.AddObject lediglich das Objekt mit einer ebenfalls unsichtbaren Bezeichnung. Also ist AddObject so zu verstehen das der erste Parameter der Listeneintrag ist, und der zweite das hinterlegte Objekt? |
AW: TComboBox.AddObject - Adressverletzung
Zitat:
|
AW: TComboBox.AddObject - Adressverletzung
![]() Zitat:
|
AW: TComboBox.AddObject - Adressverletzung
Super, danke für die flotte Hilfe :)
|
AW: TComboBox.AddObject - Adressverletzung
Moin... 8-)
und wo werden deine erzeugten TPreisliste wieder freigegeben ? |
AW: TComboBox.AddObject - Adressverletzung
Zitat:
Hier eine nützliche Prozedur dazu
Delphi-Quellcode:
{**************************************************************************
* NAME: FreeTStringsObjects * DESC: free all objects attached to a TStrings-Object *************************************************************************} procedure FreeTStringsObjects(sl: TStrings); var i: Integer; o: TObject; begin Assert(Assigned(sl)); for i := sl.Count-1 downto 0 do begin o := sl.Objects[i]; if Assigned(o) then begin o.Destroy; // spart Zeit gegenüber .Free sl.Objects[i] := nil; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 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