2012-03-02 12 views
0

実行時にラベルを検索したいのですが、これは正しい方法ですか?実行時にコントロールを見つける正しい方法

Control[] control; 
Label label; 

control = this.Controls.Find(labelToChange, false); 
label = (Label)control[0]; 

単一のコントロールを返すメソッドが見つかりませんでした。そのため、コレクションを格納してから最初のものを取得する必要がありました。それは常に単一のアイテムを見つけるでしょう。

答えて

1

これは正しい方法です。

MSDN documentationはコレクションを返す理由を示していませんが、いくつかのサブコントロールをカプセル化してそのコントロールを数回インスタンス化するコントロールがある場合は、ラベルのコレクションになります。

ので:

  1. あなたは今まであなたのコードがOKである任意の時点で目に見える一つのコントロールが存在することを保証することができます。
  2. 複数の可能性がある場合は、返されるすべてのコントロールをループし、それぞれに対して同じアクションを実行するか、本当に必要なコードをいくつか追加する必要があります。
+0

Atleastの彼らは、自動的にすべての子コントロールthrou反復処理するための簡単な方法を提供します。 Asp.netはこれを持っていませんでした。 – TheGateKeeper

1

LINQでの基本的な考え方:

Label label; 

var c = from x in Controls.Find("labelToChange", false) 
    where x.GetType() == typeof(Label) 
    select x; 

label = (Label)c.FirstOrDefault(); 
+0

ありがとう、私はLinqを使用したことがない – TheGateKeeper

関連する問題