使用 C# 按类型和属性值过滤控件

ins*_*um_ 3 c# winforms

有没有有效的方法来过滤面板的子控件的类型,例如Label属性,例如Tag值?

例如我有一个 panel1:

label1.Tag=1;
label2.Tag=1;
label3.Tag=2;
label4.Tag=3;
textBox1.Tag=1;
panel1.Add(controls above);
Run Code Online (Sandbox Code Playgroud)

我想获取集合中的所有标签,或者所有带有Tag=1, 或and在语句之间使用的控件。

Jon*_*eet 5

听起来你想要类似的东西:

foreach (var control in panel.Controls
                             .Cast<Control>()
                             .Where(c => object.Equals(c.Tag, 1))
{
    ...
}
Run Code Online (Sandbox Code Playgroud)


Eri*_*oom 5

您可以使用OfType扩展方法过滤特定类型的所有控件:

var labelControls = panel.Controls.OfType<Label>();
Run Code Online (Sandbox Code Playgroud)

然后如果你想添加额外的过滤(例如基于标签):

var filteredLabelControls = labelControls.Where(l => l.Tag == (object)1);
Run Code Online (Sandbox Code Playgroud)