2

コントロールがラベルで、その名前が「label」で始まるフォームのすべての値をクリアしたい

このコード:

List<Label> lbls = this.Controls.OfType<Label>().ToList();
foreach (var lbl in lbls)
{
    if (lbl.Name.StartsWith("label"))
    {
        lbl.Text = string.Empty;
    }
}

...ラムダが何も見つからないため、機能しません-lbls.Count = 0。

これは、他のコントロール (私の場合はパネルなど) の子であっても、フォーム上のすべてのコントロールを取得しませんか?

4

3 に答える 3

7

この方法を使用してみてください:

public void ClearLabel(Control control)
{
   if (control is Label)
   {
       Label lbl = (Label)control;
       if (lbl.Text.StartsWith("label"))
           lbl.Text = String.Empty;

   }
   else
       foreach (Control child in control.Controls)
       {
           ClearLabel(child);
       }

}

フォームを ClearLabel メソッドに渡すだけです。

于 2012-10-09T21:58:44.597 に答える
4

いいえ、パネルを再帰的に検索しません。

やりたいことをするために、次のことができます。

void changeLabel(Control c)
{
    if (lbl.Name.StartsWith("label"))
    {
        lbl.Text = string.Empty;
    }

    foreach(Control _c in c.Controls)
        changeLabel(_c);
}
于 2012-10-09T21:54:24.073 に答える