フォーム上のすべてのコントロールをEnabled,またはDisabledに設定する

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;
    }
}

コメント

このブログの人気の投稿

TabError: inconsistent use of tabs and spaces in indentation

マクロを含んだ.XLSがExcel2010で開けない

using ディレクティブまたはアセンブリ参照が不足しています。