再帰を使用できます。まず最初に、コントロールをパラメーターとして受け入れるデリゲートを定義します。
public delegate void DoSomethingWithControl(Control c);
次に、このデリゲートを最初のパラメーターとして受け取るメソッドと、それを再帰的に実行するためのコントロールを2番目のパラメーターとして実装します。このメソッドは、最初にデリゲートを実行し、次にコントロールのControlsコレクションをループして、それ自体を再帰的に呼び出します。これは、コントロールがコントロールで定義されており、ラベルなどの単純なコントロールに対して空のコレクションを返すため、機能します。
public void RecursivelyDoOnControls(DoSomethingWithControl aDel, Control aCtrl)
{
aDel(aCtrl);
foreach (Control c in aCtrl.Controls)
{
RecursivelyDoOnControls(aDel, c);
}
}
これで、ラベルの値を変更するためのコードをメソッドに配置し、デリゲートを介してフォームで呼び出すことができます。
private void SetLabel(Control c)
{
if (c is Label)
{
if (c.Text == "12/31/1600")
{
c.Text = "Not Found";
}
}
}
RecursivelyDoOnControls(new DoSomethingWithControl(SetLabel), this);