[gelöst] TFormularclass von FormularObject ermitteln

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Carsten1975
Beiträge: 23
Registriert: Mi 4. Apr 2018, 18:22

[gelöst] TFormularclass von FormularObject ermitteln

Beitrag von Carsten1975 »

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
Zuletzt geändert von Carsten1975 am Sa 19. Feb 2022, 09:23, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 9074
Registriert: Mo 11. Sep 2006, 19:01

Re: TFormularclass von FormularObject ermitteln

Beitrag von theo »

Verstehe nicht ganz, aber ich vermute du suchst "Parent"?

Code: Alles auswählen

(TWinControl(Sender).Parent as TForm).Caption:='test';   
Aber Achtung, wenn Das Control auf einem Anderen liegt (z.B. auf einem Panel) ist dies der Parent und dessen Parent Ggf. das Formular.

wp_xyz
Beiträge: 4262
Registriert: Fr 8. Apr 2011, 09:01

Re: TFormularclass von FormularObject ermitteln

Beitrag von wp_xyz »

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:

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;

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1079
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Winux (L 2.0.11 FPC 3.2)
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: TFormularclass von FormularObject ermitteln

Beitrag von fliegermichl »

Wenn sicher ist, daß man das Formular sucht, in dem ein Control enthalten ist, kann man GetParentForm(Control) verwenden.

Carsten1975
Beiträge: 23
Registriert: Mi 4. Apr 2018, 18:22

Re: TFormularclass von FormularObject ermitteln

Beitrag von Carsten1975 »

Danke, das ist die Lösung.

Benutzeravatar
theo
Beiträge: 9074
Registriert: Mo 11. Sep 2006, 19:01

Re: [gelöst] TFormularclass von FormularObject ermitteln

Beitrag von theo »

Alles schön, aber im Normalfall weiss man doch, wo (drauf) das Control liegt und braucht das Formular eigentlich nicht jedes Mal suchen.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5098
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: [gelöst] TFormularclass von FormularObject ermitteln

Beitrag von af0815 »

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).

Benutzeravatar
theo
Beiträge: 9074
Registriert: Mo 11. Sep 2006, 19:01

Re: [gelöst] TFormularclass von FormularObject ermitteln

Beitrag von theo »

af0815 hat geschrieben:
Sa 19. Feb 2022, 19:23
Wenn man zB Frames verwendet, weist du nicht auf welchen Formular dein Control liegt
Klar kann das sein, deshalb sagte ich "im Normalfall".
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".

Antworten