我试图隐藏面板中的所有标签(而不是整个面板)。 对于标签只是label1,label2的情况,我会这样做(尽管如果你知道一种更简单的方法请告诉我):
for(int i=0; i<3; i++){
Panel p = this.Controls["panel"+i] as Panel;
for(int j=0; j<9; i++){
if(p.Controls["label"+j]!=null) p.Controls["label"+j].Visible=false;
}
}
所以在我的标签是lbObj,LbInt4的情况下..我如何遍历所有这些并隐藏它们?我试过了:
foreach(Panel p in Controls)
foreach(Label l in p) l.Visible=false;
但这似乎不起作用。
答案 0 :(得分:3)
第一种方式:使用2个foreach循环
foreach (Panel panel in Controls.OfType<Panel>())
{
foreach (var label in panel.Controls.OfType<Label>())
{
label.Visible = false;
}
}
第二种方式:使用LINQ
foreach (var label in Controls.OfType<Panel>().SelectMany(panel =>panel.Controls.OfType<Label>()))
{
label.Visible = false;
}
您的问题是您正在查看面板内部,但您应该在该面板中查找控件和
Controls.OfType<Panel>()
是你需要的。
编辑:寻找特定标签
foreach (Panel panel in Controls.OfType<Panel>())
{
foreach (var label in panel.Controls.OfType<Label>())
{
if (label.Text.Contains("label")) // or any other condition that you want to perform
{
label.Visible = false;
}
}
}
与LINQ相同(有点复杂且不那么可读):
foreach (var label in Controls.OfType<Panel>().SelectMany(panel => panel.Controls.OfType<Label>().Where(label => label.Text.Contains("label"))))
{
label.Visible = false;
}
使用LINQ方法需要添加:
using System.Linq;
命名空间。
答案 1 :(得分:1)
试试这个:
foreach(本节中的面板p.Controls)
foreach(p.Controls中的标签l)l.Visible = false;
答案 2 :(得分:1)
尝试使用控件集合上的OfType<T>
过滤器来获取所需类型,然后采取相应措施:
foreach (Panel p in this.Controls.OfType<Panel>()) {
foreach (Label l in p.Controls.OfType<Label>()) {
l.Visible = false;
}
}
此代码假设您在其他面板中没有更多面板等