2017-09-08 7 views
1

プログラムの開始時にすべてのコントロールをループして、すべてTextBoxListBoxesList<Controls>に格納するという方法でオブジェクトをグループ化していた問題を解決しました。 私はそれらにアクセスしようとすると、私が行いますリスト内のコントロールとリストボックスのプロパティへのアクセス

foreach(var g in controlsList) 
{ 
    g.Text = "VALUE"; 
} 

、それは動作しますが、私はg.SelectedIndex = 0その間違ったことをしようと、私はそのプロパティがlistBoxに固有のものとしなければならない推測しています。どのように解決するのですか?

答えて

2

私は、これはあなたが探しているものだと思います。各コントロール

foreach (var c in Controls) 
{ 
    var listBox = c as ListBox; 
    if (listBox != null) 
    { 
     listBox.SelectedIndex = 0; 
    } 
} 

を安全にListBoxにキャストされます。そうでない場合、結果はnullになり、ifブロックによってスキップされます。同じ演算子として使用して行うことができる

foreach(var control in controlsList) 
{ 
    if(control is ListBox) // check if this control is a listbox 
     ((ListBox)control).SelectedIndex = 0; // now it is save to cast to listbox 
} 

foreach(var control in controlsList) 
{ 
    var listBox = control as ListBox; 
    if(listBox != null) // check if cast was ok 
     listBox.SelectedIndex = 0; // use listBox 
} 
+0

あなたの答えは、私はどの私のように「Gが割り当てられているために、リストボックスの変数を追加し、それを解決助けましたListBox "so" ListBox pom = gとしてListBox; "その新しい "pom"変数で、私は必要なプロパティにアクセスできました。 –

0

リストボックス アクセスするには、これを正しいオブジェクトにキャストする必要があります。ここで

は例です:

foreach(var c in controlsList) 
{ 
    c.Text = "VALUE"; 
    if (c is ListBox) 
    { 
     ListBox listBox = c as ListBox; 
     listBox.SelectedIndex = 0; 
    } 
} 
-1

あなたはプロパティが固有であることをおっしゃるあなたが最初の宛先型にキャストする必要があり、そのプロパティにアクセスするには

+0

私は 'as'を使って' null'をチェックする方が速いと思います。個人の好み。どうしたの? @トムシャート – spottedmahn

3

あなたは、単にコントロールをフィルタリングするOfTypeを使用することができます。

foreach(ListBox l in Controls.OfType<ListBox>()) 
    l.SelectedIndex = 0; 
関連する問題