使用LINQ设置控件的可见性

时间:2015-04-01 16:25:41

标签: linq collections controls

我正在努力重构一些代码来练习LINQ。出于某种原因,我无法让这段代码合作。

        //ActionControls is a ControlCollection
var actionControls = flowLayoutPanel1.FilterControls(c => c is Button);

    //TODO: Optimize
  foreach(var control in actionControls)
  {
      control.Visible = workingItemDataTable.AsEnumerable().Any(row => "btn" + row.Field<string>("Name") == control.Name);
  }

我现在想做什么。

flowLayoutPanel1.FilterControls(c => c is Button && c.Name == "btnTaskInfo"//btnTaskInfo is always visible
                   || workingItemDataTable.AsEnumerable().Any(row => "btn" + row.Field<string>("Name") == c.Name)).Cast<Button>()

但是在将其作为按钮转换后,我无法弄清楚如何设置visible = false。任何建议?

1 个答案:

答案 0 :(得分:0)

你仍然需要迭代控件,但你可以这样做,假设FilterControls不仅仅是Where的别名:

var actionControls = flowLayoutPanel1.OfType<Button>();

在lambda表达式中迭代和执行集合有一些“技巧”和快捷方式,但它使代码看起来很乱,而且它们大多只是黑客攻击。您可以创建自己的扩展名ForEach(如果您真的想要这样做,则无法使用它)。

flowLayoutPanel1.OfType<Button>().ForEach(btn=>{btn.Visible= ... });