C# 如何在多个面板中隐藏控件?
我试图隐藏面板中的所有标签,而不是整个面板。 对于标签仅为label1、label2的情况。。我会这样做,但如果你知道更简单的方法,请告诉我:C# 如何在多个面板中隐藏控件?,c#,winforms,C#,Winforms,我试图隐藏面板中的所有标签,而不是整个面板。 对于标签仅为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=fals
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;
}
}
但这似乎不起作用。试试这个:
此控件中的每个面板p
p.控件中的foreachLabel l.Visible=假
第1种方式:使用2个foreach循环
foreach (Panel panel in Controls.OfType<Panel>())
{
foreach (var label in panel.Controls.OfType<Label>())
{
label.Visible = false;
}
}
命名空间。尝试在控件集合上使用OfType筛选器来获取所需的类型,然后采取相应的行动:
foreach (Panel p in this.Controls.OfType<Panel>()) {
foreach (Label l in p.Controls.OfType<Label>()) {
l.Visible = false;
}
}
此代码假定在其他面板中没有更多面板,等等。那么你想用这段代码做什么?你想隐藏面板中的所有标签吗?还是只隐藏具有特定名称模式的所有标签?@Idle\u请注意这两种情况know@Vantalk我编辑了答案。OfType似乎无法识别:System.Windows.Forms.Control.ControlCollection不包含的定义'OfType'…@Vantalk add使用System.Linq;命名空间。编辑了答案,现在应该没有问题了。使用.System.Linq添加,效果很好。这意味着我相信这两个例子都使用Linq。标记为最完整的答案。@Vantalk of Type是第1种方式中的LINQ方法。并选择第二种方式中的many&OfType&Where。这将返回无法将类型标签的对象强制转换为类型面板。
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;
}
}
}
foreach (var label in Controls.OfType<Panel>().SelectMany(panel => panel.Controls.OfType<Label>().Where(label => label.Text.Contains("label"))))
{
label.Visible = false;
}
using System.Linq;
foreach (Panel p in this.Controls.OfType<Panel>()) {
foreach (Label l in p.Controls.OfType<Label>()) {
l.Visible = false;
}
}