BCBでフォーム(TForm)上のすべてのコントロールをEnabled,またはDisabledに設定する。
ウィンドウを含め、コントロールはTWinControlクラスを継承しているようなので、このクラスを使ってまとめてEnabled/Disanledの設定を行う。
例)
——————————————————————-
呼び出し側は、なんらかの条件判定で処理用のメソッドに自分自身を引き渡す。
if(flag == false){
this->SetAllControlEnabled(this, flag);
}
——————————————————————-
処理側のメソッドでは引数として渡されたTWinControl のControlsプロパティを参照して設定を行う。
コントロールが更にコントロールを含んでいれば(例えば、TGroupBoxの中にTRadioButtonが配置されている)、さらにそのコントロールを処理するために、同じメソッドを再度呼び出す。
TfrmHoge::SetAllControlEnabled(TWinControl *control, bool flag)
{
// 子供のコントロールを順次処理する
for (int i = 0; i < control->ControlCount; i++)
{
TControl *child = control->Controls[i];
// 念のためTwinControlを継承しているか確認(不要か?)
if(child->InheritsFrom(__classid(TWinControl)) ) {
// 子供のコントロールがさらにコントロールを含んでいるようであれば再度メソッドを呼び出す
if (dynamic_cast<TWinControl *>(child)->ControlCount > 0){
this->SetAllControlEnabled(dynamic_cast<TWinControl *>(child), flag);
}
}
// コントロールをEnableの状態を設定する
child->Enabled = flag;
}
}