![]() |
Variable aus anderem Formular übernehmen
von Matze
Zitat:
Gruß Willie. Wie kann ich erreichen, dass Zitat: Matze zu lesen ist? |
AW: Variable aus anderem Formular übernehmen
Zeig mal deinen Code (nur den betreffenden Teil), sonst kann dir hier keiner helfen.
|
AW: Variable aus anderem Formular übernehmen
Sind die Variablen wirklich im abschnitt "public" der Form1 deklariert?
Gehören die beiden Units für Form1 und Form2 tatsächlich zu deinem Projekt und werden gemeinsam compiliert? Möglicherweise wird bei dir nur die Unit für Form2 übersetzt und greift auf eine veraltete Form1.dcu zu, die diese Variablen noch nicht hat. Gib den Formularen mal vernünftige Namen und versuch es erneut. |
AW: Variable aus anderem Formular übernehmen
Sprichst du die Variablen von Form2 aus auch als Form1.Variable1 an oder nur mit Variable1?
|
AW: Variable aus anderem Formular übernehmen
Unit TelListe_h
Delphi-Quellcode:
Unit TelListe_Zeig
private
{Private-Deklarationen } public TelList: TTelList; Wei: Boolean; PfDateina: string; end; var MainForm: TForm;
Delphi-Quellcode:
MainForm.Wei wird in TelListe_Zeig nicht gefunden.
unit TelListe_Zeig;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, TelListe_h, Vcl.StdCtrls, Edit1, Vcl.ExtCtrls; Gehören zum gleichen Projekt und werden gemeinsam kompiliert. |
AW: Variable aus anderem Formular übernehmen
Zitat:
Hier ist der Fehler: es muss MainForm: TMainForm heißen. Ich hatte im Objekt Inspektor Name Form1 in MainForm geändert. Aber warum hat es vorher mit Form1 auch nicht funktioniert? |
AW: Variable aus anderem Formular übernehmen
Wahrscheinlich stand da auch schon
Delphi-Quellcode:
und nicht
var Form1: TForm
Delphi-Quellcode:
, warum auch immer.
var Form1: TForm1
|
AW: Variable aus anderem Formular übernehmen
Ich mache das immer etwas anders.
Ich referenziere nach Möglichkeit nie die aufrufende Form, wenn es sich vermeiden lässt. Da ich die aufzurufende Form eh in die Uses der aufrufenden Form aufnehmen muss, setze ich auch von dort die Daten.
Delphi-Quellcode:
Bei Umfangreicheren Datenstrukturen übergebe ich nur den Zeiger auf das Objekt oder schreibe mir ein Assign, mache mir also eine Kopie in eine Object, welches als Public in der frmDetails deklariert ist, und verteile die Daten dann im TfrmDetails.OnFormShow.
procedure TMainForm.btnEdit(Sender: TObject);
begin frmDetails.edtName.Text:=BeispielObject.Name; frmDetails.edtAlter.Text:=IntToStr(BeispielObject.Name); if frmDetails.ShowModal=mrOK then begin BeispielObject.Name:=frmDetails.edtName.Text; BeispielObject.Alter:=StrToInt(frmDetails.edtAlter.Text); end; end; So vermeide ich Rückwärtsbeziehungen. Ich bestimme den Zeitpunkt, wann und wie meine Variablen in der aufrufenden Form aktualisiert werden. |
AW: Variable aus anderem Formular übernehmen
Ich mache es noch anders und verpasse dem aufzurufenden Form entsprechende Properties, die ich dann setzen und auslesen kann. Das hat den Vorteil, dass es mir egal ist, wo und in welchen Komponenten die jeweiligen Daten dargestellt werden.
Delphi-Quellcode:
Auf der anderen Seite dann
type
TModalForm = class(TForm) edtName: TEdit; // weitere Komponenten private function GetUserName: string; procedure SetUserName(const Value: string); public property UserName: string read GetUserName write SetUserName; end; ... function TModalForm.GetUserName: string; begin Result := edtName.Text; end; procedure TModalForm.SetUserName(const Value: string); begin edtName.Text := Value; end;
Delphi-Quellcode:
procedure TfrmDingens.EditUsername;
var frm: TModalForm; begin frm := TModalForm.Create(nil); try frm.UserName := Username; if frm.ShowModal = mrOK then Username := frm.UserName; finally frm.Free; end; end; |
AW: Variable aus anderem Formular übernehmen
Zitat:
|
AW: Variable aus anderem Formular übernehmen
Das gleiche würde ich jetzt nicht sagen. Was ist denn, wenn man einmal die darstellende Komponente wechselt (Memo in Listbox z.B.)? Dann hat man nicht nur eine Stelle, die man ändern muss, sondern ggf. viele über mehrere Units verteilt. Da mache ich mir lieber einmal die Mühe und trenne gleich die Logik von der Darstellung (ein String geht rein, ein String kommt raus... fertig).
|
AW: Variable aus anderem Formular übernehmen
Zitat:
Zitat:
|
AW: Variable aus anderem Formular übernehmen
Ob mit oder ohne Getter/Setter ist erstmal egal, Hauptsache Property und kein direkter Zugriff, denn wenn benötigt, kann man Setter/Getter nachrüsten, ohne die Aufrufe zu ändern.
|
AW: Variable aus anderem Formular übernehmen
Genau, wenn ich den Code von TModalForm nicht gezeigt hätte, wüsste man ja gar nicht, dass über die Property auf das Edit zugegriffen wird. Man muss es auch gar nicht wissen, es genügt, wenn man die Property benutzt.
|
AW: Variable aus anderem Formular übernehmen
Hallo,
dieser blöde Fehler hat Zeit gekostet. Ich habe schon oft auf Variablen aus einem anderen Formular zugegriffen, deshalb war ich so irritiert, als es nicht klappte. Die Ursache weiß ich immer noch nicht richtig. Ich habe mal in einem Kurs gelernt, dass man nicht direkt auf Variablen einer class zugreifen sollte. Das Fenster-Formular habe ich allerdings immer davon heraus gelassen. Willie. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:55 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