Windowsフォーム上のすべてのコントロールを列挙するには?.NET TIPS

» 2004年10月29日 05時00分 公開

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「.NET TIPS」のインデックス

連載目次

 Windowsフォーム上に配置されているコントロールは、フォームのControlsプロパティからアクセスすることができる。

 しかし、PanelコントロールやGroupBoxコントロールなどを利用している場合には、フォームのControlsプロパティからすべてのコントロールにアクセスできるわけではない。なぜなら、Panelコントロールなどの、ほかのコントロールをグループ化できるコントロール(コンテナ・コントロールと呼ばれる)上に配置されたコントロールは、そのコンテナ・コントロールのControlsプロパティからしかアクセスできないためだ(Controlsプロパティは、すべてのコントロールの基本クラスであるControlクラス(System.Windows.Forms名前空間)で定義されている)。

 このため、フォーム上に配置されているすべてのコントロールを列挙するには、まずフォームのControlsプロパティに登録されている各コントロールにアクセスし、さらにそれぞれのコントロールのControlsプロパティにアクセスするといったことを繰り返す必要がある。この処理を行うメソッドを記述すると次のようになる。

public Control[] GetAllControls(Control top)
{
  ArrayList buf = new ArrayList();
  foreach (Control c in top.Controls)
  {
    buf.Add(c);
    buf.AddRange(GetAllControls(c));
  }
  return (Control[])buf.ToArray(typeof(Control));
}

すべてのコントロールを再帰的に取得するメソッド(C#)

 

Public Function GetAllControls(ByVal top As Control) As Control()
  Dim buf As ArrayList = New ArrayList
  For Each c As Control In top.Controls
    buf.Add(c)
    buf.AddRange(GetAllControls(c))
  Next
  Return CType(buf.ToArray(GetType(Control)), Control())
End Function

すべてのコントロールを再帰的に取得するメソッド(VB.NET)

 このメソッドは、パラメータで指定されたコントロールからスタートして、Controlsプロパティによるコントロールの親子階層を再帰的にたどって行き、すべてのコントロールをControl型の配列として返す。ArrayListクラス(System.Collections名前空間)のAddRangeメソッドは、配列やほかのArrayListオブジェクトの全要素を自分自身のインスタンスに追加するメソッドである。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。