Zugriff auf untergeordnete Controls



  • Hallo,

    ich habe ein ganz normales 'Form'. Auf diesem Form liegt jetzt ein PageControl, auf diesem Page Control liegen wiederum GroupBox Controls. In diesen gibt es dann Labels und Edit Controls.

    Ich möchte gewisse Controls der untersten Ebene (Edits, Labels) bei Knoppfdruck auf unsichtbar setzen. Dafür habe ich bei diesen Komponenten die Eigenschaft 'Tag' auf 1 gesetzt.

    Jetzt bräuchte ich aber die Möglichkeit mit einer Schleife auf alle Controls zuzugreifen um die Tag-Eigenschaft auszulesen und evtl das COntrol unsichtbar zu machen.

    Geht das ???

    Mit

    for (int i=0;i<Form->ControlCount;i++)
    {
     // ...
    }
    

    bekomme ich aber nur die oberste Ebene an Controls.

    Danke schon mal im Voraus.

    Gruß

    Psi



  • Du mußt dann einfach nur für die gefundenen Controls auf der obersten Ebene wieder überprüfen, ob dort Controls enthalten sind.

    Beispielsweise:

    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    	TWinControl* Start;
    	Start = dynamic_cast<TWinControl*>(Form1);
    	if (Start)
    		GetControls(Start);
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::GetControls(TWinControl* CurControl)
    {
    	for (int i = 0; i < CurControl->ControlCount; ++i)
    	{
    		RichEdit1->Lines->Add(CurControl->Controls[i]->Name);
    		TWinControl* NewControl;
    		NewControl = dynamic_cast<TWinControl*>(CurControl->Controls[i]);
    		if (NewControl)
    			GetControls(NewControl);
    	}
    }
    


  • Verwende ComponentCount und Components[], damit kannst du dann auf alle Controls(Komponenten) des Formulars zugreifen. Oder aber du schreibst eine rekursive Funktion, welche z.B. bei Panels und GroubBoxen deren Unterelemente aufruft.



  • Danke JoeM.

    Das hat's gebracht.

    Thx !!!


Anmelden zum Antworten