![]() |
arbeiten mit tobjectlist
hallo community,
ich habe nun mehrere klassen in einer tobjectlist gespeichert. jetzt will ich die procedure einer bestimmten instanz dieser objektliste aufrufen. gefunden habe ich bis jetzt tkiclass(kiobjectlist.last).aufrufaktki; (ist halt schon in mein cod umgeschrieben) oder mit items[index] arbeiten. letzteres funktioneirt aber wohl nicht bei dem aufruf einer methode - wie stelle ich es also an, dass von instanz nummer 3 eine bestimmte methode aufgerufen wird? grüße blinder007 |
AW: arbeiten mit tobjectlist
Wenn du ein Objekt aus einer Objektliste nimmst ist es sinnvoll das Objekt in einer lokalen Zwischenvariablen abzulegen.
Beispiel:
Delphi-Quellcode:
var
i : Integer; tmp_obj : TKiClass; begin for i:= 0 to objlist.Count-1 do begin tmp_obj := TKiClass(objlist.Items[i]); // jetzt kann man mit dem ausgelesenen Objekt arbeiten tmp_obj.AddEnergy(100); tmp_obj.RepairDamage; end; |
AW: arbeiten mit tobjectlist
... oder man nimmt gleich die generische TObjectList<T> ...
|
AW: arbeiten mit tobjectlist
Hätte ich spontan auch gesagt.
Zur eigentlichen Frage: Eigentlich geht es mit einem absoluten Index (z.B. 3) genau so wie du es momentan auch machst: Deine Methode "aufrufAktki()" rufst du ja folgendermaßen auf dem letzten Objekt in der Liste auf:
Delphi-Quellcode:
Wenn du nun das an Position drei haben möchtest, ändert sich ja nur das Last():
TKIClass(kiObjectList.Last()).aufrufAktki()
Delphi-Quellcode:
oder, als Alternative:
TKIClass(kiObjectList.Items[3]).aufrufAktki()
Delphi-Quellcode:
Wenn du statt einer einfachen
TKIClass(kiObjectList[3]).aufrufAktki()
Delphi-Quellcode:
eine
TObjectList
Delphi-Quellcode:
nimmst, wird es noch einiges kürzer:
TObjectList<TKIClass>
Delphi-Quellcode:
kiObjectList[3].aufrufAktki();
|
AW: arbeiten mit tobjectlist
Das 3. Item hat aber den Index 2 ;)
Index 3 zeigt auf das 4. Item |
AW: arbeiten mit tobjectlist
Ist das "dritte Item" nun das an "Position Drei" oder "Position Zwei"? Gibt es kein "nulltes Item" aber eins an "Position Null"? Was wenn man ein Array hat, das im Gegensatz zu einer Liste keine "Position Null" hat? Fragen über Fragen... :gruebel:
|
AW: arbeiten mit tobjectlist
Listen und dynamische Arrays sind grundsätzlich 0-indiziert, d.h. das erste Item hat den Index 0.
|
AW: arbeiten mit tobjectlist
Zitat:
Zitat:
Dann würde ich, ganz grob, so vorgehen:
Delphi-Quellcode:
Wobei ich hier einfach mal den "SoftCast"
if kiObjectList.Items[i] is TKIClass then
(kiObjectList.Items[i] as TKiClass).DoSomething; if kiObjectList.Items[i] is TPlayerClass then (kiObjectList.Items[i] as TPlayerClass).DoSomethingDifferent;
Delphi-Quellcode:
anstelle des HardCasts verwendet habe
as
Oder habe ich das Ganze wieder einmal falsch interpretiert und es sind mehrere Instanzen *einer* Klasse gemeint? |
AW: arbeiten mit tobjectlist
Zitat:
|
AW: arbeiten mit tobjectlist
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 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