![]() |
Wie auf Komponenten und Ereignisse im eigebettenten Formular zugreifen?
Hallo, ich lade ein Formular(Form1) in ein Panel(ContainerPanel) das auf meinem Hauptformular(MainForm) liegt:
Delphi-Quellcode:
Im Formular(Form1) habe ich einen Button der nun ein weiteres Formular(Form2) öffnet.
var MainForm: TMainForm;
... procedure TMainForm.FormCreate(Sender: TObject); var NewFormClass: TFormClass; NewForm: TForm; begin NewFormClass := TForm1; if ContainerPanel.ControlCount > 0 then ContainerPanel.Controls[0].Free; if Assigned(NewFormClass) then begin NewForm := NewFormClass.Create(Self); NewForm.Hide; NewForm.BorderStyle := bsNone; NewForm.Parent := ContainerPanel; NewForm.Align := alClient; NewForm.Show; end; end; Form2 erstelle ich ganz normal in der IDE, ist also unabhängig von Form1 und MainForm.
Delphi-Quellcode:
angezeigt wird.
procedure TForm1.Button1Click(Sender: TObject);
begin Form2.Show; end; Wie kann ich nun z.B. von Form2 die Komponenten(Eigenschaften) und Ereignisse von Form1 ansprechen? Wenn ich z.B. ein Label(Label1) auf Form1 habe.
Delphi-Quellcode:
Leider reagiert Form1 nicht auf meinen Button.
procedure TForm2.Button1Click(Sender: TObject);
begin Form1.Label1.Caption:= 'Test !'; end; Hab schon verschiedenes mit Parent Anweisungen wie
Delphi-Quellcode:
usw. versucht leider ohne Erfolg. :cry:
Form2.Parent:= Form1;
|
AW: Wie auf Komponenten und Ereignisse im eigebettenten Formular zugreifen?
Vielleicht ne blöde Frage, aber hast Du mal getestet (z.B. mit nem Showmessage) ob Dein Button1Click überhaupt aufgerufen wird??? :shock:
...oder mal ein Application.ProcessMessages nach Deiner Caption-Zuweisung ausprobiert? |
AW: Wie auf Komponenten und Ereignisse im eigebettenten Formular zugreifen?
Also Button1.Click von Form2 funktioniert.
Muss also an was anderem liegen. |
AW: Wie auf Komponenten und Ereignisse im eigebettenten Formular zugreifen?
Komponenten auf Form2 reagieren auch (ShowMessage funktioniert auch)
Komisch! |
AW: Wie auf Komponenten und Ereignisse im eigebettenten Formular zugreifen?
Du weist die neu erstellte Instanz von TForm1 nicht der Variablen Form1 zu, sondern NewForm (NewForm := NewFormClass.Create(Self);).
Somit ist dein Form1 != der erstellten Instanz. Hast du Form1 noch im "automatischen create", dann greifst du mit Form2 auf eine andere (unsichtbare) Instanz zu. |
AW: Wie auf Komponenten und Ereignisse im eigebettenten Formular zugreifen?
Delphi-Quellcode:
funktioniert aber auch nicht!
NewForm:= NewFormClass.Create(Form1);
|
AW: Wie auf Komponenten und Ereignisse im eigebettenten Formular zugreifen?
Zitat:
Delphi-Quellcode:
Nicht schön, aber funktioniert.
Form1 := NewFormClass.Create(self);
|
AW: Wie auf Komponenten und Ereignisse im eigebettenten Formular zugreifen?
Delphi-Quellcode:
Geht ja nicht weil Compiler meckert!
procedure TMainForm.FormCreate(Sender: TObject);
var NewFormClass: TFormClass; NewForm: TForm; begin NewFormClass := TForm1; if ContainerPanel.ControlCount > 0 then ContainerPanel.Controls[0].Free; if Assigned(NewFormClass) then begin NewForm := NewFormClass.Create(self); NewForm.Hide; NewForm.BorderStyle := bsNone; NewForm.Parent := ContainerPanel; NewForm.Align := alClient; NewForm.Show; end; end; [dcc32 Fehler] Unit1.pas(39): E2010 Inkompatible Typen: 'TForm1' und 'TForm' Ich glaub ich steh grad am Schlauch:( |
AW: Wie auf Komponenten und Ereignisse im eigebettenten Formular zugreifen?
Sorry wollte schreiben:
Delphi-Quellcode:
procedure TMainForm.FormCreate(Sender: TObject);
var NewFormClass: TFormClass; NewForm: TForm; begin NewFormClass := TForm1; if ContainerPanel.ControlCount > 0 then ContainerPanel.Controls[0].Free; if Assigned(NewFormClass) then begin Form1 := NewFormClass.Create(self); NewForm.Hide; NewForm.BorderStyle := bsNone; NewForm.Parent := ContainerPanel; NewForm.Align := alClient; NewForm.Show; end; end; |
AW: Wie auf Komponenten und Ereignisse im eigebettenten Formular zugreifen?
Zitat:
Warum nicht einfach?
Delphi-Quellcode:
procedure TMainForm.FormCreate(Sender: TObject);
begin if ContainerPanel.ControlCount > 0 then ContainerPanel.Controls[0].Free; Form1 := TForm1.Create(self); Form1.Hide; Form1.BorderStyle := bsNone; Form1.Parent := ContainerPanel; Form1.Align := alClient; Form1.Show; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:45 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