Komponentenname existiert?
-
Hi
Ich habe in einer TForm mehrere TImages.
Die TForm hat wiederrum mehrere Tabs (TPageControl) jetzt möchte ich gerne in einem bestimmten Tab die TImages durchgehen und zählen(manipulieren).for(i=0;i<Form5->TabSheet1->ComponentCount;i++) { if (Form5->TabSheet1->Components[i]->ClassNameIs("TImage")) { anzahl++; } }Keine Compilerfehler, aber Ergebnis: 0
Nehme ich "TabSheet1->" heraus, dann bekomme ich 26.
Wieso geht denn das nicht?

Wie bekomme ich raus, ob das TImage ein Member von TabSheet1 ist?
-
OMG. Ich sehe grad ein Thread unter mir, hat jemand eine ähnliche Frage
Also das war nicht ich 
-
Hallo
die Images sind keine Member von den Tabsheets, sondern von dem Form. Deshalb bekommst du auch das Ergebnis, wenn du von Form aus zählst. Du solltest dir den Unterschied zwischen Parent und Owner nochmal anschauen.
Du scheinst ja die Images dynamisch zu erstellen, da empfehle ich dir wie in dem bereits von dir gefundenen Thread ein dynamisches Array, dann brauchst du nicht zu zählen.
Ansonsten must du eben noch den Parent vergleichen :
TImage *CurImage; for(i=0;i<Form5->ComponentCount;i++) { CurImage = dynamic_cast<TImage *> (Form5->Components[i]); if ((CurImage) && (CurImage->Parent == TabSheet1)) { anzahl++; } }bis bald
akari
-
Ahh ich verstehe.
Ich erstelle sie nicht dynamisch, jedoch bringt mich das Beispiel nicht ganz weiter, da jedes TImages in einem TPanel liegt und somit dieses der Parent ist.

Ich müsste jetzt irgendwie erfahren, ob das TPanel wiederrum ein Member von TabSheet1 ist *am Kopf kratz*
Ich werds mal versuchen anders zu lösen
, danke für die Hilfe.
-
Hallo
na dann must du zuerst nach den Panels suchen, und auf diese dann den Parent vergleichen.
Oder du überlegts dir eine bessere Struktur, und arbeitest dann mit (Dynamischen) Arrays. Denn nicht suchen, sondern finden ist effizient.
bis bald
akari
-
Dynamisch dürfte etwas schwer werden, da ich OnClick für jedes TImage benötige.
Aber gleich mal andere Frage

Gibt es eine Möglichkeit aus einem String auf die Eigenschaften einer existierenden Komponente zuzugreifen?
for (i=0;i<10;i++) { TButton *button = ZugriffAufKompoente("Button"+i) if (button) { button->Caption = "Button:" + InToStr(i); } }Das wird durch casten gehen, aber wie genau?
-
Hallo
siehe TForm::FindComponent().
Dazu steht einiges im Forum und in der BCB-Hilfe.
Aber auch da geht es nur um Owner-Beziehung, nicht um Parent.bis bald
akari
-
Klasse Hilfe! Danke!!

-
Stan schrieb:
Dynamisch dürfte etwas schwer werden, da ich OnClick für jedes TImage benötige.
Wenn es immer die gleiche OnClick Methode ist:
Image->OnClick=MeineOnClickMethode; //Ohne die Klammern der Methode!bzw kannst du ja in der Methode auf den Sender reagieren.