![]() |
Klassentyp nicht verfügbar
Hallo zusammen,
ich habe folgendes Problem: mit folgendem Befehl speichere ich Objekte in einer StringList:
Delphi-Quellcode:
wobei ACB vom Typ TGridCheckBoxExt ist.
if (ACB <> nil) and (ACB is TGridCheckBoxExt)
then AJob.ObjectList.AddObject(ACB.Name,ACB); Anschließend kopiere ich den Inhalt der StringListe ObjectList mit
Delphi-Quellcode:
.
sgGrid.ObjectList.Assign(AJob.ObjectList)
Nun lese ich die einzelnen Objekte wieder aus und überprüfe deren Klassentyp mit
Delphi-Quellcode:
Leider wird das Objekt nicht als TGridCheckBoxExt erkannt ! :wall:
for index:= 0 to Pred(sgGrid.ObjectList.Count) do
begin sgGrid.ObjectList.Objects[index] is TGridCheckBoxExt then begin end; end; Was mache hier nun wieder falsch ? :gruebel: |
Re: Klassentyp nicht verfügbar
Zitat:
Und dann pack da mal ein ShowMessage oder so zwischen begin und end. Evtl. wird das Ganze vom Compiler wegrationalisiert, da dort eh nix passiert. Gruß Igotcha |
Re: Klassentyp nicht verfügbar
Hallo Igotcha,
vielen Dank für deine Antwort. Das if ist in der Originalversion vorhanden und zwischen dem Begin und End deklariere ich dann das Objekt mit
Delphi-Quellcode:
Nur da kommt das Programm erst gar nicht hin, da das Object nicht als TGridCheckBoxExt erkannt wird.
ACB := TGridCheckBoxExt(sgGrid.ObjectList.Objects[index]);
Self.SetCheckBoxAlignment(ACB,ACol,ARow); Gruß Woto |
Re: Klassentyp nicht verfügbar
Hallo :hi:,
kannst du dir nicht mit .CalssName oder etwas Änlichen den KLassentyp ausgeben lassen? MfG freak |
Re: Klassentyp nicht verfügbar
Wenn du auf ein Objekt in der Liste zugreifst musst du dem Compiler IMMER den Typ angegeben:
entweder so:
Delphi-Quellcode:
wenn du den Typ vorher mit is geprüft hat oder mit
TGridCheckBoxExt(TsgGrid.ObjectList.Objects[index]).Eigenschaft
Delphi-Quellcode:
wenn der Typ vorher nicht geprüft wurde. as behinhaltet ein is, heisst er prüft bei as den Typ nochmal und löst eventuell eine Exception aus.
(TsgGrid.ObjectList.Objects[index] as TGridCheckBoxExt).Eigenschaft
|
Re: Klassentyp nicht verfügbar
@jim_raynor: Der Typ ist ja schon von der Stringliste her vorgegeben. Und zwar ist das Property Objects vom Typ TObject und somit kann überprüft werden ob dieses TObject vom Typ TGridCheckBoxExt ist.
@Igotcha: Dort wo die Prüfung mit "is" fehlschläft könntest du dir doch mal in den watsches sgGrid.ObjectList.Objects[index].Classname ausgeben lassen |
Re: Klassentyp nicht verfügbar
Hallo SirThornberry,
genau das habe ich schon probiert und als Wert wird "nicht verfügbar" ausgegeben. zu jim_raynor: ich caste das Objekt mit
Delphi-Quellcode:
MfG
ACB := TGridCheckBoxExt(sgGrid.ObjectList.Objects[index]);
Woto |
Re: Klassentyp nicht verfügbar
Zitat:
Werden vielleicht die Objekte nicht bei Assign nicht übernommen? Zitat:
|
Re: Klassentyp nicht verfügbar
@woto: Hast du "Allow Functioncalls" oder wie auch immer das in der deutschen Version heißt bei dem eintrag in den watches ausgegeben? Wenn das auch nicht hilft könntest du das ja mal mit ShowMessage ausgeben oder in eine Listbox etc. schreiben lassen.
|
Re: Klassentyp nicht verfügbar
Hallo zusammen,
danke für den Hinweis mit der "Funktionsaufrufe gestatten"-Option bei den Watches. Ich kannte diese noch nicht. :bounce2: Nachdem ich die Option enabled hatte, wird mir im Watchfenster für die Variable sgGrid.ObjectList.Objects[index].Classtype.Classname eine Zugriffsverletzung ausgegeben. Ich habe mal die Adressen des 1. Objektes in beiden Stringlisten verglichen und festgestellt, daß diese ungleich sind ! :duck: Ich vermute, daß ich irgendwie aus einer falschen StringList die Objekte auslese. Werde dies überprüfen und mich wieder melden. :coder: Gruß Woto |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:05 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 by Thomas Breitkreuz