Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C按类型和属性值筛选控件#_C#_Winforms - Fatal编程技术网

C# 使用C按类型和属性值筛选控件#

C# 使用C按类型和属性值筛选控件#,c#,winforms,C#,Winforms,是否有有效的方法按面板的子控件的类型(例如标签属性,例如标签值)过滤面板的子控件 例如,我有一个面板1: label1.Tag=1; label2.Tag=1; label3.Tag=2; label4.Tag=3; textBox1.Tag=1; panel1.Add(controls above); 我想获取集合中的所有标签,或者所有带有Tag=1的控件,或者在语句之间使用和。听起来您想要的是: foreach (var control in panel.Controls

是否有有效的方法按面板的子控件的类型(例如
标签
属性,例如
标签
值)过滤面板的子控件

例如,我有一个面板1:

label1.Tag=1;
label2.Tag=1;
label3.Tag=2;
label4.Tag=3;
textBox1.Tag=1;
panel1.Add(controls above);

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

听起来您想要的是:

foreach (var control in panel.Controls
                             .Cast<Control>()
                             .Where(c => object.Equals(c.Tag, 1))
{
    ...
}
foreach(面板控件中的var控件
.Cast()
其中(c=>object.Equals(c.Tag,1))
{
...
}

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

var labelControls = panel.Controls.OfType<Label>();

最自然的方法是遍历面板的控件并执行一些if语句……您尝试过什么吗?在我看来,类似于
panel1.Controls.Where(c=>c.Tag==1)的东西
应该很简单。我有一个
foreach
循环,里面有几个
if
语句。我只是在寻找最有效的方法。看起来,我在寻找这样的东西!有趣的解决方案!
var filteredLabelControls = labelControls.Where(l => l.Tag == (object)1);