我有一个FlowLayoutPanel,我想用ID(字符串)列表和当前进度条(整数)的位置用ProgressBars更新。此列表我将调用列表 a 。
应将FlowLayoutPanel.Controls
与列表 a :
FlowLayoutPanel.Controls
集合。FlowLayoutPanel.Controls
集合中的控件在列表 a 中没有相应的名称,则应将其删除并处理。让我感到困扰的是,FlowLayoutPanel.Controls
集合没有通用列表那么多的方法,因此我无法真正遵循互联网上的任何指南。
你能帮我解决这个问题吗?
谢谢!
编辑:回复DJ KRAZE评论: 我已经使用列表创建了类似的东西,但正如我所说,Control集合没有像Lists那样的一些方法。这是我的代码(可能不起作用,我重新编写它以使其更容易理解):
//删除旧
// Make a new list of IDs, where none of the IDs from myList1 can be found in myList2
var remove = myList1.Where(f => !myList2.Any(g => g == f.ID));
//Do some operation for the object which is about to get removed
foreach (Object obj in remove)
{
// Some operation
}
// remove from list
myList1.RemoveAll(i => remove.Contains(i));
//删除重复项
// Remove Duplicates from myList2, so only the remaining object are to be started
myList2.RemoveAll(f => myList2.Any(g => g.ID == f));
//将myList2中剩余的对象添加到myList1
foreach(Object obj in myList2)
{
// add to myList1 and do some operation, like starting it
}
答案 0 :(得分:3)
为所有扩展方法添加System.Linq
。
答案 1 :(得分:1)
FlowLayoutPanel
(以及其他容器控件)的控件集合不实现IEnumerable<T>
,而只实现非通用IEnumerable
。使用IEnumerable
exension方法将IEnumerable<T>
转换为Cast<T>
。然后你可以使用所有充足的LINQ:
flowLayoutPanel1.Controls
.Cast<Control>()
.Where(c => c.Name == "...")
.OrderBy(...)
...
注意:大多数LINQ扩展方法都扩展为IEnumerable<T>
。