0

我以为这很容易,但事实并非如此

我有带有绑定列表框的 Windows 窗体(具有值成员和显示成员)

我为列表框启用了多选

所以我需要获取选定项目的所有且仅选定的值(记住它是绑定的,所以我需要选定的值而不是文本或选定的文本)

所以我可以在其他一些表中插入这些值

我试过了,但它不起作用

 for (int x = 0; x <= listProjects.SelectedItems.Count; x++)
 {
     if(listProjects.GetSelected(x) == true)
     {
         string d = listProjects.SelectedValue.ToString();
         string s = listProjects.SelectedItems[x].ToString();

         //listProjects.DisplayMember[x].ToString();
         //listProjects.Items[x].ToString();
     }
  } 
4

2 回答 2

1

当您将项目绑定到 ListBox 时,ListBox.Items 将属于您绑定到它的项目类型,因此如果您的项目的类型为 BoundItemType 并且 Value 是 BoundItemType 的属性,您可以执行以下操作:

for (int x = 0; x <= listProjects.SelectedItems.Count; x++)
{
    BoundItemType boundItem = listProjects.SelectedItems[x] as BoundItemType;
    string selectedValue = boundItem.Value;
}
于 2013-10-13T11:20:36.057 回答
0

假设您DataSource的元素类型为ItemType,并且值成员为ItemValue,我们可以将每个选定的项目 (of object) 转换为该类型并获得您想要的值:

var values = listBox1.SelectedItems.OfType<ItemType>()
                                   .Select(item=>item.ItemValue).ToList();

您始终可以在Reflection事先不了解基础项目类型的情况下使用,以确保其ValueMember有效。但是,我认为这仅供参考,不推荐

var values = listBox1.SelectedItems.OfType<object>()
                     .Select(item=> item.GetType()
                                        .GetProperty(listBox1.ValueMember)
                                        .GetValue(item, null)).ToList();
于 2013-10-13T11:15:52.533 回答