如果没有选择任何项目或其中一项,或者选择了多于1项,我试图获取ListBox中所有元素的列表。我编写了这样的代码,但它没有编译:
ListBox.ObjectCollection listBoXElemetsCollection;
//loading of all/selected XMLs to the XPathDocList
if (listBoxXmlFilesReference.SelectedIndices.Count < 2)
{
listBoXElemetsCollection = new ListBox.ObjectCollection(listBoxXmlFilesReference);
}
else
{
listBoXElemetsCollection = new ListBox.SelectedObjectCollection(listBoxXmlFilesReference);
}
因此,为了使这段代码能够工作,我需要使用我不想要的ListBox.SelectedObjectCollection listBoxSelectedElementsCollection;
之类的东西,因为我想在foreach
中使用它:
foreach (string fileName in listBoXElemetsCollection)
{
//...
}
答案 0 :(得分:3)
您需要将SelectedObjectCollection
转换为object[]
的数组。
ListBox.SelectedObjectCollection sel = new
ListBox.SelectedObjectCollection(listBoxXmlFilesReference);
ListBox.ObjectCollection col = new
ListBox.ObjectCollection(listBoxXmlFilesReference,
sel.OfType<object>().ToArray());
答案 1 :(得分:3)
如果你不需要,我只需要一点点而不是乱用ListBox ObjectCollections。由于您希望将ListBox上的项目作为字符串进行迭代,为什么不使用List并加载列表的显示方式:
List<string> listItems;
if (listBoxXmlFilesReference.SelectedIndices.Count < 2) {
listItems = listBoxXmlFilesReference.Items.Cast<string>().ToList();
} else {
listItems = listBoxXmlFilesReference.SelectedItems.Cast<string>().ToList();
}
foreach (string filename in listItems) {
// ..
}
答案 2 :(得分:2)
我可以看到你正在尝试做什么并且它没有编译,因为ListBox.ObjectCollection
类型与ListBox.SelectedObjectCollection
不同 - 即使在你的情况下它们是包含字符串类的列表本身因此编译错误不同。
假设您的项目是列表框中的字符串,您可以这样做:
var items = listBoXElemetsCollection.Items.OfType<string>();
if (listBoXElemetsCollection .SelectedIndices.Count >= 2)
items = listBoXElemetsCollection.SelectedItems.OfType<string>();
foreach(var item in items)
//do stuff