![]() |
frame ansprechen
Hallo zusammen,
ich habe folgendes Problem. Ich habe ein Form da drauf ist ein Panel. Auf dieses Panel lade ich ein Frame. Auf diesem Fram sind Buttons Grids usw. jetzt ist auf diesem Frame was ja auf einem Panel klebt wieder ein Panel auf dem ich ein neues Frame laden muss mit verschiedenen Edit Feldern. Wie kann ich das lösen... hier noch mein code um das Frame auf das Panel zu legen was auf meinem form liegt:
Delphi-Quellcode:
procedure TFormHaupt.JvNavPnlPageSchuelerverwClick(Sender: TObject);
var newFrame: TFrmSchuelerverwaltung; begin newFrame := TFrmSchuelerverwaltung.Create(PnlMain); newframe.Align := alClient; newFrame.Visible := true; newframe.Parent := PnlMain; FormData.TblKlasse.Open; FormData.QrySchueler.Open; end; |
Re: frame ansprechen
Entweder änderst du NewFrame von einer lokalen Variablen zu einem Feld in TFormHaupt oder du gibst dem NewFrame einen eindeutigen Namen, dann kannst du es später mit PnlMain.FindChildControl wieder finden.
|
Re: frame ansprechen
verstehe ich nicht ganz, ich habe das noch nie gemacht!
kannst du mir mal bitte ein beispiel zeigen...! |
Re: frame ansprechen
Um es nochmal einfacher auszudrücken!
ich habe ein form da drauf ein panel und auf dem panel ein frame. jetzt möchte ich eine komponente ansprechen die auf dem frame liegt aus der form unit. Wie kann ich dies machen?? |
Re: frame ansprechen
Es gibt da zwei unterschiedliche Ausgangsmöglichkeiten:
1. Du hast den Frame im VCL-Designer in das Panel gesetzt: dann existiert ein Feld im Form, das du direkt ansprechen kannst. 2. Du hast den Frame zur Laufzeit hinzugefügt (wie in deinem ersten Post beschrieben), dann kannst du entweder eine eigene Variable für diesen Frame im Form definieren oder dem Frame einen Namen geben und später über FindChildControl wiedersuchen. Wie gebe ich dem Frame einen Namen?
Delphi-Quellcode:
Wie finde ich den Frame wieder?newFrame := TFrmSchuelerverwaltung.Create(PnlMain); newFrame.Name := 'DerFrameName'; newframe.Align := alClient; newFrame.Visible := true; newframe.Parent := PnlMain;
Delphi-Quellcode:
Auf die Controls des Frames kannst du dann ganz einfach über die entsprechenden Namen zugreifen. Ohne weitere Informationen kann ich auch kein sinnvolles Beispiel geben. Aber angenommen, das Panel auf dem Frame heißt "DasPanel", dann erfolgt der Zugriff im vorgehenden Beispiel über "DerFrame.DasPanel".
var
DerFrame: TFrmSchuelerverwaltung; begin DerFrame := PnlMain.FindChildControl('DerFrameName') as TFrmSchuelerverwaltung; ... |
Re: frame ansprechen
Es funktioniert irgendwie noch nicht so wie es soll. Das Zweite Frame sieht man nur noch alleine, von dem Rest ist nichts mehr zu sehen...
Hier nochmal der Code:
Delphi-Quellcode:
//Schülerverwaltung laden procedure TFormHaupt.JvNavPnlPageSchuelerverwClick(Sender: TObject); var newFrame: TFrmSchuelerverwaltung; DerFrame: TFrmSchuelerverwaltung; newFrame2: TFrmStammdaten; begin newFrame := TFrmSchuelerverwaltung.Create(PnlMain); newFrame.Name := 'Schuelerdaten'; newframe.Align := alClient; newFrame.Visible := true; newframe.Parent := PnlMain; //Schülerdaten laden FormData.TblKlasse.Open; FormData.QrySchueler.Open; DerFrame := PnlMain.FindChildControl('Schuelerdaten') as TFrmSchuelerverwaltung; newFrame2 := TFrmStammdaten.Create(DerFrame.PnlSchuelerverwaltung); newframe2.Align := alClient; newFrame2.Visible := true; newframe2.Parent := PnlMain; end; |
Re: frame ansprechen
dann mach es doch so: Sag deinem Frame auf dem Handes des Forms, dass es die Daten für das interne Panel zu laden hat und gib dabei auch dem Frame noch an, welche Daten es zu laden hat. Dann sollte das alles gehen.
Ansonsten: Sag dem Frame, dass das interne Panel public/published ist und erstelle dein internes Frame auf dem Published-Panel Bernhard |
Re: frame ansprechen
kann ich es nicht machen wie in meinem code von oben? da scheint doch nur ein denkfehler zu sein oder??
|
Re: frame ansprechen
Delphi-Quellcode:
Bernhard
var
neu: TStammdaten; begin //... neu := TFrmStammdaten.Create(neuFrame.PnlSchuelerverwaltung); neu.parent := neuFrame.PnlSchuelerverwaltung; |
Re: frame ansprechen
Zitat:
Delphi-Quellcode:
und es sollte gehen.
newframe2.Parent := DerFrame.PnlSchuelerverwaltung;
Allerdings brauchst du den ganzen Kram mit DerFrame und FindChildControl gar nicht, wenn das Ganze innerhalb einer einzigen Methode stattfindet:
Delphi-Quellcode:
//Schülerverwaltung laden
procedure TFormHaupt.JvNavPnlPageSchuelerverwClick(Sender: TObject); var newFrame: TFrmSchuelerverwaltung; newFrame2: TFrmStammdaten; begin newFrame := TFrmSchuelerverwaltung.Create(PnlMain); newframe.Align := alClient; newFrame.Visible := true; newframe.Parent := PnlMain; //Schülerdaten laden FormData.TblKlasse.Open; FormData.QrySchueler.Open; newFrame2 := TFrmStammdaten.Create(newFrame.PnlSchuelerverwaltung); newframe2.Align := alClient; newFrame2.Visible := true; newframe2.Parent := newFrame.PnlSchuelerverwaltung; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:25 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