To da się zrobić i nie potrzeba do tego tablicy, ani funkcji
FindComponent. Wystarczy posłużyć się funkcją
ClassNameIs, która sprawdza nazwę klasy komponentu i zwraca wartość typu
true lub
false. Trzeba również skorzystać z klasy
TComponent do tymczasowego przechowywania nazwy komponentu wyliczanego na formularzu. Do wyliczania komponentów należy posłużyć się właściwościami samego formularza:
ComponentCount - zwraca liczę komponentów na formularzu, oraz
Components - zwraca uchwyt do komponentu. Potem wystarczy posłużyć się rzutowaniem polimorficznym do zmiany dowolnej wartości wybranego komponentu w oparciu o jego klasę.
W przykładzie znajduje się funkcja, która pobiera jeden argument typu bool i w zależności od jego wartości odpowiednio ustawia właściwość
Checked wszystkich komponentów typu TCheckBox na formularzu.
plik nagłówkowy np. Unit1.h
- Kod: Zaznacz cały
private:
void CheckBoxState(bool state);
plik źródłowy np. Unit1.cpp
- Kod: Zaznacz cały
//---------------------------------------------------------------------------
void TForm1::CheckBoxState(bool state)
{
TComponent *Temp;
int count = this->ComponentCount - 1;
for(int i = count; i > 0; i--)
{
Temp = this->Components[i];
if(Temp->ClassNameIs("TCheckBox"))
{
reinterpret_cast<TCheckBox *>(Temp)->Checked = state;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
CheckBoxState(true);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
CheckBoxState(false);
}
//---------------------------------------------------------------------------