![]() |
Problem mit 3 Formularen
Ich hab erst vor kurzem angefangen mit Delphi 2005 zu programmieren und hoffe es bald zu beherschen
Jetzt habe ich aber ein Problem die Lage ist wie folgt: Ich habe 3 Formulare in einem Projekt(VCL-Formularanwendung) Formular 1 und 2 sollen per klick auf einen Button jeweils 1 Label.Caption (also Label1 und Label2)auf dem Formular3 verändern Auf Formular 1 und 2 ist dabei jeweils ein Button. Dann soll das 3. Formular mit den veränderten Captions angezeigt werden Es funktioniert wenn ich nur 2 Formulare habe aber bei zahlen darüber funktioniert es nicht mehr Ich hoffe meine Beschreibung reicht aus und ihr könnt mir helfen Danke schonmal im voraus |
Re: Problem mit 3 Formularen
Wie sieht der Code mit 2 Formularen aus?
|
Re: Problem mit 3 Formularen
Also ein bischen Code wäre schonmal nicht schlecht...
Sonst guck docherstmal ob du auch in den beiden Formen(Form1, Form2) die Unit von Form3 implementiert hast und vergewissere dich das du auch den Formnamen vor das label sezt, welches du verändern möchtest. Hier ein kleines Beispiel, funktioniert so wunderbar: Form1:
Delphi-Quellcode:
Form2:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation uses Unit3; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Form3.Label1.Caption := 'WAS AUCH IMMER'; end; end.
Delphi-Quellcode:
Form3:
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form2: TForm2; implementation uses Unit3; {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); begin Form3.Label2.Caption := 'NOCH EIN LABEL TEXT'; end; end.
Delphi-Quellcode:
unit Unit3;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm3 = class(TForm) Label1: TLabel; Label2: TLabel; private { Private-Deklarationen } public { Public-Deklarationen } end; var Form3: TForm3; implementation {$R *.dfm} end. |
Re: Problem mit 3 Formularen
@blackdead: ok, es ist dein erster Beitrag.
Trotzdem, nur weil es funktioniert ist es nicht sinnvoll so zu programmieren wie du das in deinem Beispiel zeigst! Man sollte niemals von einer Unit aus auf Komponenten in einer anderen Unit direkt zugreifen. Dies geschieht immer über Zugriffsmethoden. Warum? Ganz einfach stell dir vor du änderst eine Komponente auf einer Form. Dann würdest du in allen möglichen Units Fehlermeldungen erhalten und müsstest also überall in deinem Projekt herumändern. Wenn du alles über Zugriffsmethoden realisierst, knallt es nur in der Unit, in der du auch gerade die Komponente verändert hast. Das nur mal in aller Kürze... Gruss Thorsten |
Re: Problem mit 3 Formularen
Erstmal danke für die schnellen antworten
@mkinzler so sieht das bei mir mit 2 Formularen aus Formular 1
Delphi-Quellcode:
Formular 2
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation uses Unit2; {$R *.dfm} var T: TForm2; procedure TForm41.Button1Click(Sender: TObject); begin T := TForm2.Create(self); T.Label1.Caption := 'Text'; T.ShowModal; T.Free; end; end.
Delphi-Quellcode:
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) Label1: TLabel; private { Private-Deklarationen } public { Public-Deklarationen } end; var Form2: TForm2; implementation {$R *.dfm} end. @blackdead Ok Ich habe jetzt noch das problem das wenn ich Label2 geändert habe auch Form3 angezeigt haben will das würde ich dann so machen
Delphi-Quellcode:
aber durch "Create" wird ja was erstellt und so habe ich dann ja nicht die veränderten Labels sondern die unveränderten
var
s: TForm3; procedure TForm38.Button1Click(Sender: TObject); begin Form3.Label2.Caption := 'Hans2'; s := TForm39.Create(self); s.ShowModal; s.Free; end; @omata ich werde mich dann mal mit Zugriffsmethoden beschäftigen |
Re: Problem mit 3 Formularen
Delphi-Quellcode:
Du greifst hier auf ein Label eines bereits instanzierten Formulars zu, instanzierst danach aber ein Neues und läss dies dann anzeigen.
Form3.Label2.Caption := 'Hans2';
s := TForm39.Create(self); s.ShowModal; s.Free; |
Re: Problem mit 3 Formularen
Und wie lasse ich mir das instanzierte Formular anzeigen?
Wenn ich einfach den Teil mit Create weglasse gibts ne fehlermeldung |
Re: Problem mit 3 Formularen
Du brauchst keine Variable für das Form zu erstellen.
Wenn du sonst nichts geändert hast, dann werden die zur Laufzeit erstellt.
Delphi-Quellcode:
Ein Formular zur Laufzeit ist was ganz anderes und ist auch viel zukompliziert für dich :zwinker:
Form3.Label2.Caption := 'Hans2';
//Form3.ShowModal; // ist nur wichtig, wenn du bei Buttons die Eigenschaft ModalResult festlegst. Da bekommst du dan den wert von ModalResult zurück :zwinker: Form3.Show; Der Text kannst du bei beiden Buttons verwenden. Natürlich umschreiben :zwinker: |
Re: Problem mit 3 Formularen
[quote="NickelM"]
Ein Formular zur Kaufzeit ist was ganz anderes und ist auch viel zukompliziert für dich :zwinker: quote] Ja, das würde ich auch sagen. Mir ist es ebenfalls noch nie gelungen ein Formular zur Kaufzeit zu erstellen. :mrgreen: Aber mal davon abgesehen, würde ich schon empfehlen, sich damit zu befassen, wie Forms erstellt und zerstört werden. Einfach, um diese Problematik von allem "Mysteriösen" zu befreien. Dann hätte Lolzor künftig sehr viel weniger Probleme mit mehr als 2 Forms. Lolzor: Schau am Besten mal in die DPR-Datei deines Projektes, dort siehst du zumindest mal, wie dein Form1, Form2 usw. zur "Kaufzeit" entsteht. |
Re: Problem mit 3 Formularen
LOL Sorry ein kleiner aber lustiger Schreibfehler ändere ich gleich :mrgreen:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:40 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