如何在多个面板中隐藏控件?
How to hide controls in several panels?
我试图隐藏面板中的所有标签(而不是整个面板)。
对于标签只是 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;
但这似乎不起作用。
试试这个:
foreach (Panel p in this.Controls)
foreach(Label l in p.Controls) l.Visible=false;
第一个 way:using 2 个 foreach 循环
foreach (Panel panel in Controls.OfType<Panel>())
{
foreach (var label in panel.Controls.OfType<Label>())
{
label.Visible = false;
}
}
第二个 way:using 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;
命名空间。
尝试在您的控件集合上使用 OfType<T>
过滤器来获取您想要的类型,然后采取相应的行动:
foreach (Panel p in this.Controls.OfType<Panel>()) {
foreach (Label l in p.Controls.OfType<Label>()) {
l.Visible = false;
}
}
此代码假定您在其他面板内没有更多面板等。
我试图隐藏面板中的所有标签(而不是整个面板)。 对于标签只是 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;
但这似乎不起作用。
试试这个:
foreach (Panel p in this.Controls)
foreach(Label l in p.Controls) l.Visible=false;
第一个 way:using 2 个 foreach 循环
foreach (Panel panel in Controls.OfType<Panel>())
{
foreach (var label in panel.Controls.OfType<Label>())
{
label.Visible = false;
}
}
第二个 way:using 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;
命名空间。
尝试在您的控件集合上使用 OfType<T>
过滤器来获取您想要的类型,然后采取相应的行动:
foreach (Panel p in this.Controls.OfType<Panel>()) {
foreach (Label l in p.Controls.OfType<Label>()) {
l.Visible = false;
}
}
此代码假定您在其他面板内没有更多面板等。