Kann nicht auf propertys eigener Klasse zugreifen
Hallo,
ich habe ein Problem mit einer selbst entworfenen Klasse und zwar kann ich nicht auf die Propertys dieser zugreifen. Ich erstelle in einer anderen Klasse ganz normal meine Instanz der Klasse mit dem Standardkonstruktor und will dann einer Eigenschaft einen Wert zu weisen, hier bekomme ich aber eine Zugriffsverletzung angezeigt :( Hier mal mein Quellcode, ich sitze schon den ganzen Morgen dran und hab zich Tutorials zu dem Thema durchgewälzt aber mir fällt mein Fehler einfach nicht auf :/ Ist bestimmt nur ne Kleinigkeit die ich übersehe...
Delphi-Quellcode:
Soo das ist die Komplette Klasse, bitte helft mir ich find den Fehler einfach nicht :(
unit UnKontakt;
interface uses ExcelXP; type TKontakt = class(TObject) private { private-Deklarationen } FKndNr : String; FFullName : String; FCompanyName : String; FFileAs : String; FBusinessAddressStreet : String; FBusinessAddressPostalCode : String; FBusinessAddressCity : String; FBusinessTelephoneNumber : String; FBusinessFaxNumber : String; FEmail1Address : String; FBusinessHomePage : String; procedure SetKndNr(kndNr : String); procedure SetFullName(fullName : String); procedure SetCompanyName(companyName : String); procedure SetFileAs(fileAs : String); procedure SetBusinessAddressStreet(BAS : String); procedure SetBusinessAddressPostalCode(BAPC : String); procedure SetBusinessAddressCity(BAC : String); procedure SetBusinessTelephoneNumber(BTN : String); procedure SetBusinessFaxNumber(BFN : String); procedure SetEmailAddress(EmailAddress : String); procedure SetBusinessHomePage(BHP : String); public { public-Deklarationen } procedure FillProbs(WorkSheet: _WorkSheet; kontakt : TKontakt); property kndNr: String read FKndNr write SetKndNr; property FullName: String read FFullName write SetFullName; property CompanyName: String read FCompanyName write SetCompanyName; property FileAs: String read FFileAs write SetFileAs; property BusinessAdressStreet: String read FFileAs write SetFileAs; property BusinessAddressPostalCode: String read FBusinessAddressPostalCode write SetBusinessAddressPostalCode; property BusinessAddressCity: String read FBusinessAddressCity write SetBusinessAddressCity; property BusinessTelephoneNumber: String read FBusinessTelephoneNumber write SetBusinessTelephoneNumber; property BusinessFaxNumber: String read FBusinessFaxNumber write SetBusinessFaxNumber; property EmailAddress: String read FEmail1Address write SetEmailAddress; property BusinessHomePage: String read FBusinessHomePage write SetBusinessHomePage; end; var Kontakt: TKontakt; implementation //Die prozedur bitte erstmal ignorieren, ist noch nicht fertig ^^ procedure TKontakt.FillProbs(WorkSheet: _WorkSheet; kontakt : TKontakt); begin kontakt.SetKndNr(Worksheet.Cells.Item[1, 1].Value); kontakt.SetCompanyName(Worksheet.Cells.Item[2, 1].Value); kontakt.SetFullName(Worksheet.Cells.Item[3, 1].Value); kontakt.SetBusinessAddressStreet(Worksheet.Cells.Item[4, 1].Value); kontakt.SetBusinessAddressPostalCode(Worksheet.Cells.Item[5, 1].Value); kontakt.SetBusinessAddressCity(Worksheet.Cells.Item[6, 1].Value); kontakt.SetBusinessTelephoneNumber(Worksheet.Cells.Item[7, 1].Value); kontakt.SetBusinessFaxNumber(Worksheet.Cells.Item[8, 1].Value); kontakt.SetEmailAddress(Worksheet.Cells.Item[9, 1].Value); kontakt.SetBusinessHomePage(Worksheet.Cells.Item[10, 1].Value); kontakt.SetFileAs(Worksheet.Cells.Item[11, 1].Value); end; procedure TKontakt.SetKndNr(kndNr : String); begin Kontakt.FKndNr := kndNr; end; procedure TKontakt.SetFullName(fullName : String); begin Kontakt.FFullName := fullName; end; procedure TKontakt.SetCompanyName(companyName : String); begin Kontakt.FCompanyName := companyName; end; procedure TKontakt.SetFileAs(fileAs : String); begin Kontakt.FKndNr := fileAs; end; procedure TKontakt.SetBusinessAddressStreet(BAS : String); begin Kontakt.FKndNr := BAS; end; procedure TKontakt.SetBusinessAddressPostalCode(BAPC : String); begin Kontakt.FBusinessAddressPostalCode := BAPC; end; procedure TKontakt.SetBusinessAddressCity(BAC : String); begin Kontakt.FBusinessAddressCity := BAC; end; procedure TKontakt.SetBusinessTelephoneNumber(BTN : String); begin Kontakt.FBusinessTelephoneNumber := BTN; end; procedure TKontakt.SetBusinessFaxNumber(BFN : String); begin Kontakt.FBusinessFaxNumber := BFN; end; procedure TKontakt.SetEmailAddress(EmailAddress : String); begin Kontakt.FEmail1Address := EMailAddress; end; procedure TKontakt.SetBusinessHomePage(BHP : String); begin Kontakt.FBusinessHomePage := BHP; end; end. lg Alex |
Re: Kann nicht auf propertys eigener Klasse zugreifen
Nimm mal in deinen Settern überall das "Kontakt." weg, und schreib der Übersicht wegen die Prozedur nach der public-Deklaration unter die Properties.
|
Re: Kann nicht auf propertys eigener Klasse zugreifen
Du greifst innerhalb der Klasse ja auf eine Instanz derselben zu. Beispiel:
Zitat:
Delphi-Quellcode:
oder
procedure TKontakt.SetBusinessHomePage(BHP : String);
begin FBusinessHomePage := BHP; end;
Delphi-Quellcode:
Das natürlich in allen Methoden.
procedure TKontakt.SetBusinessHomePage(BHP : String);
begin Self.FBusinessHomePage := BHP; end; |
Re: Kann nicht auf propertys eigener Klasse zugreifen
Eigentlich sollte es dennoch gehn, da es in der selben Unit und sogar in der eigenen Klasse liegt.
Es sei denn, er hat der Variable Kontakt nicht seine Instanz zugewiesen. Aber wie schon erwähnt: nie innerhalb von Klassen auf diese "globalen" Variablen zugreifen dafür gibt es Self und self ist auch dort im Namensraum, drum geht es auch ohne etwas. Also lösche einfach die Variable var Kontakt: TKontakt; , oder wird diese wirklich gebraucht? (bei den Formularen ist diese nur da, weil die VCL irgendwo die Instanz speichern muß und damit man als Programmierer einen "externen" Zugriffspunkt hat) |
Re: Kann nicht auf propertys eigener Klasse zugreifen
Daran lag es, danke :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 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