![]() |
1 Klasse x Formulare
Hi,
ich habe eine Klasse erstellt welche mir etwas berechnet und auf einer Form ausgibt. Dank MDI kann ich jetzt einige solcher Forms machen und in jeder wird ein neues Objekt gemacht. Doch jetzt passiert folgendes: Wenn ich ein neues Fenster mache und dort rumwerkel funkt alles prima. Wenn ich ein weiteres Fenster mache und in dem rumwerkel dann auch. Wenn ich jetzt zum ersten wieder zurückgehe OHNE SCHLIESSEN des 2. dann las ich zum Beispiel dieses neu berechnen, angezeigt wirds aber beim 2. Ich hab beobachtet das einfach immer das letzte Fenster verwendet wird. Egal wieviele offen sind und von welchem zugegriffen wird. Im Hauptfenster werden einfach nur die Formulare erzeugt:
Delphi-Quellcode:
In den Formularen sieht das dann so aus:
procedure TForm1.Button1Click(Sender: TObject);
begin TForm2.Create(Self); end; procedure TForm1.Button2Click(Sender: TObject); begin TForm3.Create(Self); end;
Delphi-Quellcode:
Was ist das Problem??
var
Form3: TForm3; DasObject: TMeinObjekt; //... procedure TForm3.FormCreate(Sender: TObject); begin DasObject := TMeinObjekt.Create; //Variablen setzen... etc. end; procedure TForm3.Button1Click(Sender: TObject); begin DasObject.Berechne; end; lG Jan |
Re: 1 Klasse x Formulare
Das Erstellen der Formulare wie du das machst ist aber nicht grad die feine Art für MDI's.
Zu deinem Problem: "DasObjekt" ist eine globale variable, das ist schlecht. Du solltest die als Member der Form benutzen So wie du das gerade machst wird bei jedem erstellen einer neuen Form ein neues Objekt erzeugt und deren Referenz in "DasObjekt" gespeichert. Dadurch wird bei jedem Zugriff auf DasObjekt jeweils nur auf das letzte erstellte zugegriffen. Wenn du das Ding stattdessen als member der Klasse machst, bekommt jede Instanz der Form ein eigenes Objekt "DasObjekt" |
Re: 1 Klasse x Formulare
Zitat:
Zitat:
Verschiebe
Delphi-Quellcode:
in den Formular-Memberbereich
DasObject: TMeinObjekt;
Delphi-Quellcode:
und schon hast du keine globale Variable mehr.
type
TForm3 = class(TForm) private DasObject: TMeinObjekt; end; Und benenn bitte deine Formularklassen vernünftig. In 4 Wochen weist du nicht mehr was TForm3 bedeutet. (Edit: BB-Tag-Chaos behoben) |
Re: 1 Klasse x Formulare
Ok, das mit der Globalen Variable is klar.
Die Klassen hab ich der übersicht halber im Forum so genannt, bei mir ham die schon richtige Namen ;) |
Re: 1 Klasse x Formulare
Zitat:
Bzw. was is daran falsch? Der Rest funktioniert jetzt! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 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