![]() |
Wann sind meine Eigenschaften verfügbar?
Hi *,
ich wollte in einer Form einen Record definieren und im Constructor darauf zugreifen. Leider bekomme ich immer einen EReadError 'Ungültiger Eiegenschaftswert'. Ab wann kann ich auf die Variablen zugreifen? Wie kann ich das Problem lösen (Ich möchte die Werte belegen, bevor irgendwelche Methoden darauf zugreifen)? Cheers Per
Delphi-Quellcode:
... {weitere Methoden)
unit myunit;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons; type TModel = record srcYear: integer; targetYear: integer; end; type Tfrm_Editor = class(TForm) btnOk: TXFBitBtn; tfSrcYear: TEdit; tfTargetYear: TEdit; private { Private-Deklarationen } canceled: boolean; model: TModel; public { Public-Deklarationen } Constructor Create(form: TForm; year: integer); overload; end; var frm_Editor: Tfrm_Editor; implementation {$R *.dfm} { Creator. } Constructor Tfrm_Editor.Create(form: TForm; year: integer); begin self.Create(form); canceled:=false; <--- wirft den error model.srcYear:=year; model.targetYear:=year + 1; end; |
Re: Wann sind meine Eigenschaften verfügbar?
Wie wäre es mit einem inherited am Anfang des eigenen Konstruktors?
|
Re: Wann sind meine Eigenschaften verfügbar?
Dein Constructor sieht etwas komisch aus. Was hast du vor?
|
Re: Wann sind meine Eigenschaften verfügbar?
@Bernhard: Meinst Du so? Das geht auch nicht (gleicher Fehler, gleiche Stelle)
@mkinzler: Ich möchte beim Erzeugen der Form gleich einen Wert vorgeben. PS: Bin neu bei delphi :-) Cheers Per
Delphi-Quellcode:
{
Creator. } Constructor Tfrm_Editor.Create(form: TForm; from: integer); begin inherited Create(form); canceled:=false; model.srcYear:=from; model.targetYear:=from + 1; end; |
Re: Wann sind meine Eigenschaften verfügbar?
Dann würde ich .Loaded() überschreiben
|
Re: Wann sind meine Eigenschaften verfügbar?
Ich gehe mal davon aus, das Loaded() nach dem Laden der Klasse ausgeführt wird. Wie soll ich denn dort die Defaultwerte reinbekommen?
Cheers Per |
Re: Wann sind meine Eigenschaften verfügbar?
Loaded wird aufgerufen nachdem alle Einstellungen aus der dfm geladen wurde.
|
Re: Wann sind meine Eigenschaften verfügbar?
Und wie bekomme ich meinen Standardwert da rein? Es wird doch sicher nicht mein Standardwert bei Loaded mit übergeben.
Danke für die Hilfe Per |
Re: Wann sind meine Eigenschaften verfügbar?
Nein, aber du kannst ihn innerhalb Loaded setzen.
|
Re: Wann sind meine Eigenschaften verfügbar?
Kurze Erläuterung (ich denke nämlich wir sprechen von 2 versch. Situationen)
Ich zeige in FormA Daten für ein Jahr an (Combobox mit Jahren zur Auswahl). Nun kann man in FormA auf einen Knopf drücken und damit die Daten in ein anderes Jahr übertragen. Um das Zieljahr festzulegen, wird FormB angezeigt (s.o.). Das Ausgangsjahr in FormB soll das Jahr sein, das gerade in FormA gewählt ist. Ich hoffe, das macht mein Problem etwas klarer. Cheers Per |
Re: Wann sind meine Eigenschaften verfügbar?
Dann kannst du doch die Eigenschaften direkt setzen:
In FormA:
Delphi-Quellcode:
b := TFormB.Create( Application);
b.Canceled := False; |
Re: Wann sind meine Eigenschaften verfügbar?
Dachte ich auch schon dran. Leider bringt er nun den gleichen Fehler beim Anlegen der Form
Delphi-Quellcode:
dlg:=Tfrm_Editor.Create(frm_FormA); <--- hier wieder der EReadError
dlg.setSourceYear(getYear); dlg.showModal; |
Re: Wann sind meine Eigenschaften verfügbar?
In welcher Methode wird der Code ausgeführt?
|
Re: Wann sind meine Eigenschaften verfügbar?
OnClick des Button "Daten kopieren"
|
Re: Wann sind meine Eigenschaften verfügbar?
Steht die andere Unit unter Uses?
|
Re: Wann sind meine Eigenschaften verfügbar?
Ja ist als letztes aufgeführt. Würde er sonst eigentlich trotzdem generieren?
|
Re: Wann sind meine Eigenschaften verfügbar?
Zitat:
|
Re: Wann sind meine Eigenschaften verfügbar?
Hallo *,
vielleicht interessiert es ja mal noch jemanden. Hier kurz eine Beschreibung meiner Lösung. Ich habe die Form noch einmal angelegt und nun geht es. Ich habe dann beide Forms verglichen und gesehen, das ich die Ereignismethoden in den private Bereich verschoben hatte. Nun stehen sie mit in den "Klassenmethoden" und es geht.
Delphi-Quellcode:
unit frmeditor;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons; type TModel = record srcYear: integer; targetYear: integer; end; type Tfrm_editor = class(TForm) XFLabel1: TXFLabel; btnOk: TXFBitBtn; procedure btnOKClick(Sender: TObject); // <-- die Deklarartion stand im private Abschnitt private { Private-Deklarationen } canceled: boolean; model: TModel; public { Public-Deklarationen } Constructor Create(form: TForm; srcYear: integer); overload; end; var frm_editor: Tfrm_editor implementation {$R *.dfm} |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:17 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