2017-02-04 3 views
0

У меня есть список, который пользователь заполняет с помощью записей. Я пытаюсь перебирать ListBox и получить SelectedIndex и значение каждой записи, но я получаю сообщение об ошибке:Нужна помощь, связанная с содержимым ListBox

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

Моя ListBox на форме называется listEvents.

Вот что у меня есть:

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

Я попытался с помощью ListViewItem вместо Listbox, но это не работает, либо (и я должен изменить item.SelectedIndex к item.Index, и listEvents элемент управления listbox не имеет свойства Index, только SelectedIndex).

Любая помощь приветствуется.

+1

Вы получаете эту ошибку, потому что вы ищете Для каждого 'item' с ТипДанным из' ListBox' внутри ' 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. 
    ... 
} 
Смежные вопросы