偏列 窗口 和窗口容器 内的所有控件

spmzfz 2010-06-04 08:30:59
            foreach (Control  item in this.Controls )
{
Console.WriteLine(item.Name);
}

Console.WriteLine("------------------");
foreach ( Control item in this.panel1.Controls)
{
Console.WriteLine(item.Name);
}


在窗口有N个控件,包括一个容器控件panel还有其它的容器控件这些容器控件里又有若干子控件.我想作一次偏列,获得窗口上和窗口容器内所有的控件,请问我该如何编程。

...全文
116 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2010-06-04
  • 打赏
  • 举报
回复
public void FindControl(Control.ControlCollection ctrl)
{foreach (Control c in ctrl)
{
if (c is TextBox)
{

}
if(c.HasChildren)
FindControl(c);
}
}
或if (c.Controls != null) FindControl(c.Controls);
spmzfz 2010-06-04
  • 打赏
  • 举报
回复
好了,好了,我现在不想使用 递归
我就 是想实现 控件是不是 容器控件,如何编程?
china_k1 2010-06-04
  • 打赏
  • 举报
回复
用递归就行
zhuazhuqingchong 2010-06-04
  • 打赏
  • 举报
回复
for (int i = 0; i < this.Controls.Count; i++)
{
Console.WriteLine(this.Controls[i].Name);
GetAllControl(this.Controls[i].Controls);
}

}
private void GetAllControl(Control.ControlCollection colle)
{
foreach (Control c in colle)
{
if (c.Controls.Count > 0)
{
GetAllControl(c.Controls);
}
else
{
Console.WriteLine(c.Name);
}
}
spmzfz 2010-06-04
  • 打赏
  • 举报
回复
唉,可惜我也是初学者,对于8L和10L的不知道如何编程。
捷哥1999 2010-06-04
  • 打赏
  • 举报
回复
判断一个控件是否是容器控件,可以看它是否实现了System.Windows.Forms.IContainerControl接口
捷哥1999 2010-06-04
  • 打赏
  • 举报
回复
6楼的递归方法可行。
zzx509 2010-06-04
  • 打赏
  • 举报
回复
容器控件是ContainerControl类型
但如果你说的含子控件的就是容器,那就只能是Controls属性来判断。
Label、Panel都不是ContainerControl类型,但它们可以在Controls中添加子控件。
spmzfz 2010-06-04
  • 打赏
  • 举报
回复
嗯,我我倒是在想,有没有一个方法能够判断 一个控件是否是容器,然后再进行操作。。。

foreach (Control item in this.Controls)
{
Console.WriteLine(item.Name);
//if(item 是容器){ //DoSomeThing...}
}
有吗?
zzx509 2010-06-04
  • 打赏
  • 举报
回复

public void FindAllSubCtl(Control.ControlCollection collection)
{
for (int i = 0; i < collection.Count; i++)
{
Console.WriteLine("control current:" + collection[i].Name);

FindAllSubCtl(collection[i].Controls);
}
}

private void button1_Click(object sender, EventArgs e)
{
FindAllSubCtl(Controls);
}
spmzfz 2010-06-04
  • 打赏
  • 举报
回复
楼上的,
foreach ( Control item in this.panel1.Controls),这是在panel中,
要是还有groupBox等等呢?全部写上来我会很累的。
aaron_it 2010-06-04
  • 打赏
  • 举报
回复
用Control就可以了,所有控件的基类
周药师 2010-06-04
  • 打赏
  • 举报
回复
根据一楼的代码 改成递归就行了
spmzfz 2010-06-04
  • 打赏
  • 举报
回复
前提是 假设我不知道窗口上 是否有容器控件,容器控件可能是panel ,也可能有groupBox或者其它
要求偏列窗口上 和 容器内的所有控件,如何操作。
shighui 2010-06-04
  • 打赏
  • 举报
回复
递妇遍历就可以了。

foreach (Control item in this.Controls )
{
Console.WriteLine(item.Name);
if(item.Controls.Count>0)

{
foreach (Control item in this.Controls )
{
Console.WriteLine(item.Name);
}

Console.WriteLine("------------------");
foreach ( Control item in this.panel1.Controls)
{
Console.WriteLine(item.Name);
}
}

}

Console.WriteLine("------------------");
foreach ( Control item in this.panel1.Controls)
{
Console.WriteLine(item.Name);
}
spmzfz 2010-06-04
  • 打赏
  • 举报
回复
总结


//FindControl(this.Controls);
public void FindControl(System.Windows.Forms.Control.ControlCollection cc)
{
foreach (Control item in cc)
{
Console.WriteLine(item.Name); n += 1;
if (item.HasChildren){ FindControl(item.Controls);}
//if (item.Controls.Count > 0) { FindControl(item.Controls); }
//if (item.Controls != null) { FindControl(item.Controls); }
}
}

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧