![]() |
Delphi-Version: 5
Properties haben nach Zuweisung falsche Werte
Ich habe ein Form mit einem Button. Dieser holt sich über einen Funktion einen Vornamen und Namen. Zugeweisen wird:
Adresse.Vorname := 'a'; Adresse.Name := 'b'; Wenn Vorname und Name zusammen ausgegeben wird aber "b b" angezeigt. Richtig wäre "a b". Wie kann das sein? Mit anderen Texten in der Zuweisung klappt es manchmal und manchmal nicht. Das ist sehr merkwürdig.
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TAdresse = class(TPersistent) private FVorname: string; FName: string; public procedure Assign(Source: TPersistent); override; property Vorname: string read FVorname write FVorname; property Name: string read FName write FName; end; TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private function GetDebitorName: string; function GetReAdr: TAdresse; protected Adresse: TAdresse; public end; var Form1: TForm1; implementation {$R *.dfm} function TForm1.GetReAdr: TAdresse; begin Adresse.Vorname := 'a'; Adresse.Name := 'b'; Result := Adresse; end; procedure TForm1.FormCreate(Sender: TObject); begin Adresse := TAdresse.Create; end; procedure TForm1.FormDestroy(Sender: TObject); begin Adresse.Free; end; function TForm1.GetDebitorName: string; begin Result := GetReAdr.Vorname + ' ' + GetReAdr.Name; end; procedure TForm1.Button1Click(Sender: TObject); begin caption := GetDebitorName; end; procedure TAdresse.Assign(Source: TPersistent); begin if Source is TAdresse then begin Vorname := (Source as TAdresse).Vorname; Name := (Source as TAdresse).Name; end else inherited; end; end. |
AW: Properties haben nach Zuweisung falsche Werte
Es ist nie eine gute Idee in Methoden auf globale Variablen zuzugreifen.
Delphi-Quellcode:
function TForm1.GetReAdr: TAdresse;
begin Result.Vorname := 'a'; Result.Name := 'b'; end; |
AW: Properties haben nach Zuweisung falsche Werte
Zitat:
property Vorname: string read FVorname write FVorname; ist FVorname auch global in der Klasse gültig. Ähnlich wie Adresse hier. |
AW: Properties haben nach Zuweisung falsche Werte
Wenn Du es besser als ich weisst, warum fragst Du dann?
|
AW: Properties haben nach Zuweisung falsche Werte
Zitat:
|
AW: Properties haben nach Zuweisung falsche Werte
Hier nochmal eine Ergänzung, wie GetReAdr noch SQL ausführt:
Delphi-Quellcode:
function TForm1.GetReAdr: TAdresse;
begin if Adresse.IsEmpty then begin Query.HoleAufwändigDatenAb; Adresse.Vorname := Query.FieldByName('Vorname').asString; Adresse.Name := Query.FieldByName('Name').asString; end; Result := Adresse; end; |
AW: Properties haben nach Zuweisung falsche Werte
Hallo,
vielleicht liefert ja dein Query.HoleAufwändigDatenAb; was falsches ab? Breakpoint + Watchpoint drauf. du kannst auch eine Set-Methode für VorName schreiben und dort einen bedingten Breakpoint setzen, wenn 'b' übergeben wird. Ausserdem auch hier einen Breakpoint setzen procedure TAdresse.Assign(Source: TPersistent); Vielleicht überschreibst du auch irgendwo Speicher -> FastMM4 benutzen. Heiko |
AW: Properties haben nach Zuweisung falsche Werte
Zitat:
|
AW: Properties haben nach Zuweisung falsche Werte
Zitat:
|
AW: Properties haben nach Zuweisung falsche Werte
Zitat:
Aber er hat nicht auf seinen Compiler gehört, welcher ihm bestimmt was vonwegen "Result ist nicht initialisiert" um die Ohren wirft! :roll: [edit] :gruebel: War das
Delphi-Quellcode:
vorhin auch schon in Post #1 ?
Result := Adresse;
Nja, dein Code war zumindestens falsch, denn Result wurde nicht initialisiert.
Delphi-Quellcode:
function TForm1.GetReAdr: TAdresse;
begin Result := Adresse; Result.Vorname := 'a'; Result.Name := 'b'; end; // oder function TForm1.GetReAdr: TAdresse; begin Adresse.Vorname := 'a'; Adresse.Name := 'b'; Result := Adresse; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:51 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