ControlCount funktioniert nicht bei TCategoryPanel
-
Hallo,
ich habe folgendes Problem bei TCategoryPanel. Ich habe ein CategoryPanelGoup auf einer Form. Diese enthält 5 CategoryPanels. Jedes CategoryPanel hat Buttons oder Memos oder andere Stuerelemente.
Wenn ich abfragen will, wieviele Elemente jetzt ein CategoryPanel enthält, dann liefert er mir immer 1!
Ich mache das so:
//-----In einer Click-Routine eines Buttons... Caption=CategoryPanel1->ControlCount; //---Liefert immer 1, obwohl mehr Controls da sind //----oder Caption=CategoryPanel1->ComponentsCount; //---Liefer auch nur 1
Was mache ich falsch? Ist das ein Bug in BCB 2010??
-
Mein gesundes Halbwissen sagt mir, dass das was du da bemerkst der Unterschied zwischen Owner und Parent ist.
Wenn du mit der IDE die Komponenten erstellst, bekommen sie als Owner immer die Form und als Parent dann die Komponente in der sie gezeichnet werden.
ComponentCount bezieht sich nun auf die Anzahl der Komponenten die über Owner zugewiesen wurden.mfg
xXx
-
ja, aber wenn ich das gleiche in einem Panel mache, dann ist alles OK. Dann Liefert mit ControlCount oder eben ComponentsCount eben die Anzahl der Stuerelemente, die in diesem Panel sind. Aber CategoryPanel funktioniert das irgendwie nicht.
Mache ich einen Denkfehler oder habe ich das was vergessen?
-
Von welchem Typ ist denn "CategoryPanel1->Controls[0]"?
Evtl. befindet sich in dem CategoryPanel noch ein weiteres Panel, das erst die einzelnen Controls enthält (am besten daher einfach rekursiv durchsuchen).
-
Also, ich habe das Problem mittlerweise gelöst.
TCategoryPanel liefert bei ControlCount bzw. ComponetsCount immer 1, da es die Klasse TCategoryPanelSurface damit meint, weil erst in dieser Klasse alle Komponenten liegen. D.h. man muss erstmal Zugriff auf die untergeodnete Klasse TCategoryPanelSurface des TCategoryPanel zugreifen und erst da ControlCount bzw. ComponentsCount aufrufen.Beispiel:
//----Hier immer als Index 0 nehmen,da es nur ein Objekt gibt //----und dieses Objekt ist TCategoryPanelSurface!!! TCategoryPanelSurface *sf=(TCategoryPanelSurface*)CategoryPanel1->Components[0]; //-----Jetzt werden alle Komponenten richtig aufgezählt und man kann Zugriff auf sie erhalten Caption=sf->ControlCount;
Gruß
HawkP.S. Danke an @Th69 für den Tipp!