2013-05-07 4 views
3

У меня есть список в C#, который динамически заполняется. У меня проблема с выбранным indexex_changed из списка. Каждый раз он дает значение последнего элемента в списке, а не тот, который я выбрал. У меня такая же проблема с combobox на другой странице.Listbox всегда возвращает неправильное значение выбранного элемента

Я не знаю, почему так происходит. Кто-нибудь знает, что я делаю неправильно?

Сначала я создаю новый объект Item, чтобы положить текст с идентификатором в качестве значения в списке.

public class Item 
    { 
     public string Text { get; set; } 
     public int Value { get; set; } 

     public override string ToString() 
     { 
      return Text; 
     } 
    } 

Здесь я заполняю список с текстом и идентификатором в качестве его значения. Это прекрасно работает, список заполняется, как и должно быть.

private void FormDeelnemers_Load(object sender, EventArgs e) 
    { 
     BLPersoon blPersoon = new BLPersoon(); 
     DBOpdracht.PersoonDataTable personen = blPersoon.GetAllPersonen(); 

     //Item item = new Item(); -> edit: delete this 

     foreach (DBOpdracht.PersoonRow persoon in personen) 
     { 
      Item item = new Item(); -> edit: add this here 
      item.Text = persoon.naam; 
      item.Value = persoon.ID; 
      listBoxPersonen.Items.Add(item); 
     } 
    } 

В этом проблема. Он дает значение последнего элемента в списке, а не тот, который я выбрал. Как получить выбранный?

private void listBoxPersonen_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     int nummer = (listBoxPersonen.SelectedItem as Item).Value; 
     MessageBox.Show(nummer.ToString()); 
     //MessageBox.Show(listBoxPersonen.SelectedItem.ToString()); -> same problem 
    } 
+0

У вас есть свой список, чтобы вызвать обратную передачу при изменении выбора? Или вы используете какой-то другой элемент управления, чтобы вызвать обратную передачу? Кажется, проблема связана с тем, когда сервер фактически получает информацию от клиента, что выбранный элемент изменился. – Renan

+0

Нет, код, который вы видите в selectedindexchanged, является единственным кодом, который у меня до сих пор, потому что я наткнулся на эту проблему. С моей combobox у меня такая же проблема, и когда появляется сообщение, появляется последний элемент, но когда я закрываю окно сообщения, выбранный элемент выбирается снова. Так что это тоже странно, я думаю. – Lewis

+3

Ваш экземпляр 'Item' находится за пределами вашего цикла' foreach' в 'FormDeelnemers_Load'. – 2013-05-07 21:30:35

ответ

0

Благодаря @bmused, кто решил это в комментариях, но может ли кто-нибудь объяснить, что именно произошло?

У меня была та же проблема с combobox, где я добавлял элементы, используя foreach. вопрос заключается в том, что создает экземпляр элемента во время вставки при выборе из combobox?

P.S. Извините, администраторы не могли публиковать это как комментарий.

Смежные вопросы