2013-05-07 39 views
3

我在C#中有一个动态填充的列表框。我对列表框的selectedindex_changed存在问题。每次它给出列表框中最后一项的值,而不是我选择的值。我在另一页上有一个组合框的问题。列表框总是返回错误的选定项目的值

我不知道为什么会发生这种情况。有谁知道我做错了什么?

首先,我创建一个新的对象Item,将带ID的文本作为列表框中的值。

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

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

在这里,我填充列表框中的文本和ID作为其值。这工作正常,列表框被填充,因为它应该是。

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 2013-05-07 21:09:50

+0

不,您在selectedindexchanged中看到的代码是迄今为止唯一的代码,因为我偶然发现了这个问题。使用我的组合框时,我遇到了同样的问题,当弹出消息框时,会选择最后一个项目,但是当我关闭消息框时,我选择的项目再次被选中。所以我觉得这也很奇怪。 – Lewis 2013-05-07 21:15:57

+3

您的'Item'实例在'FormDeelnemers_Load'的'foreach'循环之外。 – 2013-05-07 21:30:35

回答

0

感谢@bmused谁在评论中解决了这个问题,但任何人都可以解释发生了什么事是什么呢?

我与combobox有同样的问题,在那里我使用foreach添加项目。问题是插入过程中物品的实例化与combobox中的选择有什么关系?

P.S.抱歉,管理员无法将其作为评论发布。