[gelöst] TFormularclass von FormularObject ermitteln
-
- Beiträge: 23
- Registriert: Mi 4. Apr 2018, 18:22
[gelöst] TFormularclass von FormularObject ermitteln
Hallo zusammen,
ich habe eine ComboBox mit dem Namen 'cmbConstWert' die auf dem Formular 'FrmConst' mit dem Namen der FormClass 'TgFrmConst' ist.
Jetzt übergebe ich als Sender das TObject TComboBox an eine Funktion.
Wie kann ich jetzt die übergeordnete FormClass 'TgFrmConst' aus dem TObject ermitteln?
Danke
Carsten
ich habe eine ComboBox mit dem Namen 'cmbConstWert' die auf dem Formular 'FrmConst' mit dem Namen der FormClass 'TgFrmConst' ist.
Jetzt übergebe ich als Sender das TObject TComboBox an eine Funktion.
Wie kann ich jetzt die übergeordnete FormClass 'TgFrmConst' aus dem TObject ermitteln?
Danke
Carsten
Zuletzt geändert von Carsten1975 am Sa 19. Feb 2022, 09:23, insgesamt 1-mal geändert.
Re: TFormularclass von FormularObject ermitteln
Verstehe nicht ganz, aber ich vermute du suchst "Parent"?
Aber Achtung, wenn Das Control auf einem Anderen liegt (z.B. auf einem Panel) ist dies der Parent und dessen Parent Ggf. das Formular.
Code: Alles auswählen
(TWinControl(Sender).Parent as TForm).Caption:='test';
Re: TFormularclass von FormularObject ermitteln
Oder etwas allgemeiner: Jedes Control hat einen Parent. Der Parent ist auch ein Control, hat also ebenfalls wiederum einen Parent. Nur nicht das Formular, das sitzt am Ende der Kette. Daher laufe einfach die Kette der Parents hoch, bis du dann das Control findest, das keinen Parent mehr hat - das ist das Formular.
Ich denke, es gibt auch eine fertige Methode dafür, die ich aber gerade nicht weiß. Aber auf jeden Fall ist es eine gute Gehirnübung, solche hierarchischen Strukturen gedanklich zu durchlaufen:
Ich denke, es gibt auch eine fertige Methode dafür, die ich aber gerade nicht weiß. Aber auf jeden Fall ist es eine gute Gehirnübung, solche hierarchischen Strukturen gedanklich zu durchlaufen:
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var
c: TControl;
p: TWinControl;
begin
c := Button1;
p := c.Parent;
while p <> nil do
begin
c := p;
p := p.Parent;
end;
ShowMessage(c.ClassName);
end;
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: TFormularclass von FormularObject ermitteln
Wenn sicher ist, daß man das Formular sucht, in dem ein Control enthalten ist, kann man GetParentForm(Control) verwenden.
-
- Beiträge: 23
- Registriert: Mi 4. Apr 2018, 18:22
Re: TFormularclass von FormularObject ermitteln
Danke, das ist die Lösung.
Re: [gelöst] TFormularclass von FormularObject ermitteln
Alles schön, aber im Normalfall weiss man doch, wo (drauf) das Control liegt und braucht das Formular eigentlich nicht jedes Mal suchen.
- af0815
- Lazarusforum e. V.
- Beiträge: 6770
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: [gelöst] TFormularclass von FormularObject ermitteln
Wenn man zB Frames verwendet, weist du nicht auf welchen Formular dein Control liegt
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: [gelöst] TFormularclass von FormularObject ermitteln
Klar kann das sein, deshalb sagte ich "im Normalfall".af0815 hat geschrieben: Sa 19. Feb 2022, 19:23 Wenn man zB Frames verwendet, weist du nicht auf welchen Formular dein Control liegt
So wie es der TE schreibt: "ich habe eine ComboBox mit dem Namen 'cmbConstWert' die auf dem Formular 'FrmConst' mit dem Namen der FormClass 'TgFrmConst' ist", ist das nichts Kompliziertes und deshalb muss er das Formular nicht jedes Mal "suchen".