Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Kann nicht auf propertys eigener Klasse zugreifen (https://www.delphipraxis.net/142060-kann-nicht-auf-propertys-eigener-klasse-zugreifen.html)

Borschti 21. Okt 2009 12:56


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:
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.
Soo das ist die Komplette Klasse, bitte helft mir ich find den Fehler einfach nicht :(

lg Alex

Mithrandir 21. Okt 2009 12:59

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.

DeddyH 21. Okt 2009 13:00

Re: Kann nicht auf propertys eigener Klasse zugreifen
 
Du greifst innerhalb der Klasse ja auf eine Instanz derselben zu. Beispiel:
Zitat:

Delphi-Quellcode:
procedure TKontakt.SetBusinessHomePage(BHP : String);
begin
  Kontakt.FBusinessHomePage := BHP;
end;

Ändere das einmal in
Delphi-Quellcode:
procedure TKontakt.SetBusinessHomePage(BHP : String);
begin
  FBusinessHomePage := BHP;
end;
oder
Delphi-Quellcode:
procedure TKontakt.SetBusinessHomePage(BHP : String);
begin
  Self.FBusinessHomePage := BHP;
end;
Das natürlich in allen Methoden.

himitsu 21. Okt 2009 13:41

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)

Borschti 22. Okt 2009 07:39

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