2017-02-04 14 views
0

ユーザーが入力するリストボックスがあります。私は、リストボックスを反復処理し、各エントリのSelectedIndexをと値を取得しようとしているが、私はエラーを取得しています。フォーム上のListBoxの内容をループするのに役立つ必要があります

Unable to cast object of type 'System.String' to type 'System.Windows.Forms.ListBox'

私のリストボックスがlistEventsと呼ばれています。

foreach (ListBox item in listEvents.Items) 
       { 
        string eventName = item.Text; 
        int index = item.SelectedIndex; 
        //do some stuff with these variables 
       } 

は、私が代わりにリストボックスののListViewItemを使用してみましたが、それはどちらか動作しない(と私はitem.Indexにitem.SelectedIndexを変更する必要があり、かつlistEvents:ここ

は私が持っているものですリストボックスコントロールにはIndex、SelectedIndexのみのプロパティはありません)。

何か助けていただければ幸いです。

+1

をあなたは '内部' ListBox'のデータ型を持つ各 'item'を探しているので、あなたはそのエラーを取得します私が想定しているlistEvents.Items'には文字列が含まれています。以下の@Graffitoの答えを参照してください。 – Hexxed

+0

'ListBox'は' SelectedIndex'を持っています - アイテムはそうではありません。あなたは各項目の_index_を意味しますか? –

答えて

0
int index = listEvents.SelectedIndex; 
foreach (object item in listEvents.Items){ 
    string eventName = (string)item; 
    // ... 
} 
+0

オブジェクトは 'SelectedIndex'プロパティを持っていますか? –

+0

それはしません。この例では、どのようにインデックスを取得しますか?または、インデックスを表すためにint変数をインクリメントする必要があります(0から順にループしていると仮定します)。 – reptiletim

+0

@reptiletim&FarzinKanzi:もちろん、私の答えは更新されていません。 – Graffito

1

アイテムのインデックスを指定する方法はありませんが、その値を取得できます。

foreach (ListItem item in listEvents.Items) 
     { 
      string eventName = item.Text; 
      string value = item.Value; 
     } 
-1

またはこれを試してください。面倒なコードですが、必要なインデックスを取得します。

listEvents.Items.Cast<object>().ToList().ForEach(li => { 
    int i = 0; 
    string eventName = li.ToString(); 
    int index = 0; 
    i++; 
}); 
+0

なぜキャストですか?そして 'ToList'?とForEach?このコードは不必要に乱雑です。 –

0

あなたは、各項目のインデックスはちょうどforループを使用する場合:

for(int i = 0; i < listEvents.Items.Count; i++) 
{ 
    string value = listEvents.Items[i].ToString(); 
    // or object value = listEvents.Items[i]; if the listbox is bound to a collection of objects. 
    ... 
} 
関連する問題