AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Form.FindChildControl('ControlName') findet TLabel nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Form.FindChildControl('ControlName') findet TLabel nicht

Ein Thema von Ares · begonnen am 13. Nov 2007 · letzter Beitrag vom 14. Nov 2007
Antwort Antwort
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#1

Form.FindChildControl('ControlName') findet TLabel nicht

  Alt 13. Nov 2007, 16:51
Hallo!

Ich habe auf einem Form mehrere Buttons und Labels, deren Caption ich mit folgender Methode ändern:

Delphi-Quellcode:
    procedure SetControlCaption(ControlName, Caption: String);
    begin
      control := MainForm.FindChildControl(ControlName);
      if ((control<>nil) and (control is TLabel)) then
        TLabel(control).Caption := Caption;
      if ((control<>nil) and (control is TButton)) then
        TButton(control).Caption := Caption;
    end;
Ein Aufruf von SetControlCaption('MeinButton', 'Test') ändern nun problemlos die Caption des Buttons "MeinButton" auf "Test". Wenn ich das Gleiche mit einerm Label "MeinLabel" versuche, passiert aber nichts, weil FindChildControl(ControlName) nur nil zurückliefert.

Wenn ich einen Button mit dem Namen "MeinLabel" erstelle, wird dieser prima gefunden und die Caption geändert. Am Namen der Control liegt es also nicht. Warum findet FindChildControl(ControlName) also keine TLabel?

Besten Dank
Ares
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Form.FindChildControl('ControlName') findet TLabel nicht

  Alt 13. Nov 2007, 16:55
Weil FindChildControl nur TWinControl's durchsucht
Nutze wenn dann FindComponent ...
Chris
  Mit Zitat antworten Zitat
Benutzerbild von peschai
peschai

Registriert seit: 15. Feb 2004
Ort: Göppingen
270 Beiträge
 
Delphi XE5 Professional
 
#3

Re: Form.FindChildControl('ControlName') findet TLabel nicht

  Alt 14. Nov 2007, 06:30
Hallo

In Ergänzung zu Deap-Sea:
Es gibt "controls" die sind echte kleine Windowsfensterl'ein mit eigenem WindowHandle und andere welche von delphi selber verwaltet werden. Ein TLabel wird z.b. nur gezeichnet hat aber kein eigenes Windowhandle ... spart ressourcen ....
Peter Schaible
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#4

Re: Form.FindChildControl('ControlName') findet TLabel nicht

  Alt 14. Nov 2007, 09:49
Afaik ist FindComponent auch nicht rekursiv. Das heisst, wenn dein Label z.B. auf einem Panel liegt, wird Form1.FindComponent das ebenfalls nicht finden. In dem Falle brauchst du eine rekursive Funktion, die alle Components auf der Form durchgeht und sich selbst mit dem Control wieder aufruft, wenn ComponentCount eines Controls > 0 ist.
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Form.FindChildControl('ControlName') findet TLabel nicht

  Alt 14. Nov 2007, 09:52
Zitat von Nuclear-Ping:
Afaik ist FindComponent auch nicht rekursiv. Das heisst, wenn dein Label z.B. auf einem Panel liegt, wird Form1.FindComponent das ebenfalls nicht finden. In dem Falle brauchst du eine rekursive Funktion, die alle Components auf der Form durchgeht und sich selbst mit dem Control wieder aufruft, wenn ComponentCount eines Controls > 0 ist.
Rekursiv ist es nicht. Richtig. Aber FindComponent geht vom Owner aus, und wenn man nicht gerade etwas tiefer in Delphi eingreift, ist der Owner jeder Komponente auf einer Form die Form selbst, so das FindComponent sehr wohl alle findet. Was du meinst ist vlt. die Eigenschaft "Controls"
Chris
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#6

Re: Form.FindChildControl('ControlName') findet TLabel nicht

  Alt 14. Nov 2007, 09:58
Ah, tatsache ... Wieder was gelernt.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz