我有一个ListBox,里面有很多项。但是,我希望能够根据项目中的匹配对列表中的项目进行排序。
所以,如果我在ListBox中有一些看起来像这样的项目:
U3 IC-00276G 236.135 198.644 90 BGA48
U12 IC-00270G 250.610 201.594 0 SOP8
J1 INT-00112G 269.665 179.894 180 SOIC16
J2 INT-00112G 269.665 198.144 180 SOIC16
FID2 FIDUCIAL 5.080 24.130 0 FIDUCIAL
FID1 FIDUCIAL 5.080 189.818 0 FIDUCIAL
FID3 FIDUCIAL 0 112.231 90 FIDUCIAL
除非项目包含“FID”,否则我希望能够保持一切相同。此时我想将它们添加到ListBox的顶部并按数字顺序..所以换句话说, NEW ListBox将如下所示:
FID1 FIDUCIAL 5.080 189.818 0 FIDUCIAL
FID2 FIDUCIAL 5.080 24.130 0 FIDUCIAL
FID3 FIDUCIAL 0 112.231 90 FIDUCIAL
U3 IC-00276G 236.135 198.644 90 BGA48
U12 IC-00270G 250.610 201.594 0 SOP8
J1 INT-00112G 269.665 179.894 180 SOIC16
J2 INT-00112G 269.665 198.144 180 SOIC16
我正在使用这样的东西:
if (aListBox.Items.Contains("FID"))
{
# I don't know what to put in here to make it grab the Item and move it
# to the top of the List and also numerically ordering them.
}
提前致谢:)
foreach (var item in listOneLines)
if (item.Contains("FID "))
ListBox.Items.Add(item);
foreach (var item in listOneLines)
if (item.Contains("FID0"))
ListBox.Items.Add(item);
foreach (var item in listOneLines)
if (item.Contains("FID1"))
ListBox.Items.Add(item);
foreach (var item in listOneLines)
if (item.Contains("FID2"))
ListBox.Items.Add(item);
foreach (var item in listOneLines)
if (item.Contains("FID3"))
ListBox.Items.Add(item);
foreach (string item in listOneLines)
if (!item.Contains("FID"))
ListBox.Items.Add(item);
和 新 ListBox循环如下:
FID1 FIDUCIAL 5.080 189.818 0 FIDUCIAL
FID2 FIDUCIAL 5.080 24.130 0 FIDUCIAL
FID3 FIDUCIAL 0 112.231 90 FIDUCIAL
U3 IC-00276G 236.135 198.644 90 BGA48
U12 IC-00270G 250.610 201.594 0 SOP8
J1 INT-00112G 269.665 179.894 180 SOIC16
J2 INT-00112G 269.665 198.144 180 SOIC16
FID2 FIDUCIAL 5.080 24.130 0 FIDUCIAL #From here down is what
FID1 FIDUCIAL 5.080 189.818 0 FIDUCIAL #I want to be removed.
FID3 FIDUCIAL 0 112.231 90 FIDUCIAL
答案 0 :(得分:2)
您可以在填充listBox时以多种方式对项目进行分组或排序 我在下面给出了一些例子。它们不一定是最令人惊讶的解决方案,但我认为通过看到一些可能性而不是通过提供一个神秘或“聪明”的解决方案,你将学到更多。这些也说明了如何在列表中的不同位置插入(如问题中所述)。
将一个列表分成两个(未排序)列表的简单方法是添加到结尾或插入列表的开头(不是一种非常有效的方法,但通常这不是UI代码中的相关问题除非你有大型名单):
foreach (string item in itemList)
{
if (item.Contains("FID"))
listbox.Items.Insert(0, item); // Add at start of list
else
listBox.Items.Add(item); // Add at end of list
}
(请注意,FID项目将以相反的顺序显示)
或者在两遍中添加项目:
foreach (string item in itemList)
{
if (item.Contains("FID"))
listbox.Items.Add(item) // Add all items with FID in them
}
foreach (string item in itemList)
{
if (!item.Contains("FID"))
listbox.Items.Add(item) // Add all items without FID in them
}
或者找到每个项目的插入位置:
foreach (string item in itemList)
{
int insertPos = 0;
bool itemIsFID = item.Contains("FID");
while (insertPos < listBox.Items.Count)
{
// Primary sort - put FID items ahead of non-FID items
bool boxItemIsFID = listBox.Items[insertPos].Contains("FID");
if (itemIsFID && !boxItemIsFID)
{
// The new item must be inserted before the existing item
break;
}
// Secondary sort - alphabetical
if (item.CompareTo(listBox.Items[insertPos]) > 0)
{
// The new item must be inserted before the existing item
break;
}
}
// Insert the item at the location we've found
if (insertPos < listBox.Items.Count)
listBox.Items.Insert(insertPos, item);
else
listBox.Items.Add(item);
}
或者最后,您可以通过实施自己的IComparer
并使用您的收藏集Sort
方法对项目集合进行预排序:
itemList.Sort(MyComparer);
foreach (string item in itemList)
listbox.Items.Add(item);
答案 1 :(得分:0)