AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Function ComponentByName

Ein Thema von torud · begonnen am 28. Okt 2006 · letzter Beitrag vom 28. Okt 2006
Antwort Antwort
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#1

Function ComponentByName

  Alt 28. Okt 2006, 16:30
Hallo Wissende,

ich kann mich leider nicht mehr so recht an die Sprache erinnern, weiss aber, dass ich schon mal ne Programmiersprache benutzt habe, in der es eine fertige Funktion ala ComponentByName gab.

Ich habe mich mal daran versucht und möchte eigentlich nur wissen, ob das so in Ordnung ist:

Delphi-Quellcode:
function ComponentByName(str_Name:String):TControl;
var
  i:integer;
begin
  Result:=nil;
  with form2 do
    for i:= 0 to ComponentCount-1 do
      begin
        if Components[i].Name = str_Name then
          begin
            Result := (Components[i] as TControl);
            break;
          end;
      end;
end;
Danke
Tom
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Function ComponentByName

  Alt 28. Okt 2006, 16:38
Die TForm-Klasse hat die Methode .FindComponent .bzw. .FindControl, die das selbe macht.
Markus Kinzler
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#3

Re: Function ComponentByName

  Alt 28. Okt 2006, 16:43
Ich Blindfuss! Danke für den Hinweis. Wenn ich könnte, würde ich den Thread gleich löschen, oh wie peinlich...

Auf der anderen Seite: Ich erhalte ja TComponent als Ergebnis, möchte aber checken, ob das Control Visible ist...muss ich da erst noch as TControl draus machen???
Danke
Tom
  Mit Zitat antworten Zitat
DocE

Registriert seit: 25. Mär 2004
108 Beiträge
 
#4

Re: Function ComponentByName

  Alt 28. Okt 2006, 16:44
Moin torud,

es gibt zwar die Funktion FindComponent, aber wenn Du das unbedingt selber lösen möchtest, dann ist so in Ordnung.

Ich würde allerdings entweder TComponent zurückgeben, also

function ComponentByName(str_Name: String) : TComponent; oder vor der Rückgabe prüfen, ob es sich (mindestens) um ein TControl handelt, also

Delphi-Quellcode:
if (Components[i] is TControl)
and (...) then
Zusätzlich würde ich persönlich das ganze noch CaseInSensivitve machen z.B. mit (Ansi)UpperCase:

if AnsiUpperCase(Components[i].Name) = AnsiUpperCase(str_Name) then
Grüsse
...Doc
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Function ComponentByName

  Alt 28. Okt 2006, 16:47
Zitat:
Auf der anderen Seite: Ich erhalte ja TComponent als Ergebnis, möchte aber checken, ob das Control Visible ist...muss ich da erst noch as TControl draus machen???
Wenn du dich nur für die Controls iteressierst, kannst du auch .FindControl verwenden.
Markus Kinzler
  Mit Zitat antworten Zitat
DocE

Registriert seit: 25. Mär 2004
108 Beiträge
 
#6

Re: Function ComponentByName

  Alt 28. Okt 2006, 16:52
FindControl finde ich etwas zu kompliziert, da es ein Handle als Parameter erwartet. Den von FindComponent zurückgegebenen Wert mußt Du (mindestens) als TControl() ansprechen, da es "vorher" (also in TComponent) die Eigenschaft "Visible" noch nicht gibt.

Grüsse
...Doc
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#7

Re: Function ComponentByName

  Alt 28. Okt 2006, 17:18
Vielen Dank für die Infos. Ich nutze nun meine Funktion, mit den erwähnten Verbesserungsvorschlägen.
Danke
Tom
  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 04:40 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