2013-01-06 6 views
5

ある名前のコンポーネントが現在のフォームに存在するかどうかを調べる必要があります。 文字列変数にコンポーネントの名前がありますが、存在しない場合は作成する必要があります。 私はこのコード現在の形式のコントロールが存在しますか?

Control c = Controls.Find(New, true)[0]; //najiti komponenty 

     if (c == null) {} 

を使用ししかし、それはインデックスが配列の範囲外であったことを私にエラーを与えます。 私はこのコードが悪いことを知っていますが、私はそれを書くのを知らず、Googleは私を助けません。

答えて

6

Findメソッドは、コントロールの配列、つまりControl[]を返します。あなたは、あなたが試してみてくださいので、IndexOutOfRangeException その結果、空の配列の最初の要素にアクセスしようとしている:

Control[] controls = Controls.Find(New, true); 
if (controls.Length > 0) 
{ 
    //logic goes here 
} 
else 
{ 
    //no components where found 
} 
+0

これは私に、このエラーを与える:暗黙的に「System.Windows.Forms.Control」 – Crooker

+0

申し訳ありませんが、私のミスに型「System.Windows.Forms.Control []」を変換できません。 、私は答えを更新しました –

+0

ありがとう、これは良い作品です。 – Crooker

3

Control.ContainsKey()メソッドを使用してみてください、(コントロール名をcontaing文字列変数を渡す代わりに、私の例で引用されたテキスト):

if (!this.Controls.ContainsKey("MyControlName")) 
{ 
    // Do Something 
} 
+0

別の良いオプション、+1 –

+0

より良いオプション*。 –

関連する問題