c#用递归遍历整个窗体上的子控件

遍历之后为什么找不到panel,datagrid?
2025-01-05 14:03:37
推荐回答(4个)
回答(1):

public void LoadAllControl(Control.ControlCollection ctls)
{
foreach (Control con in ctls)
{
Consol.WriteLine(con.Name);

if(con.Controls.Count>0) LoadAllControl(con.Controls);
}
}

//调用
LoadAllControl(this.controls);

回答(2):

我这个可以万能检测所有空间是否为空,你看看是不是你想要的效果。

bool CheckAll(Control.ControlCollection coll)
{
foreach (Control var in coll)
{
if (var.Text == "")
{
lblmessage.ForeColor = Color.Red;
this.lblmessage.Text = var.Name + "为空!";
return false;
}
}
return true;
}

调用:
private void button1_Click(object sender, EventArgs e)
{
if (CheckAll(this.Controls) == true)
{
lblmessage.ForeColor = Color.Green;
this.lblmessage.Text = "Success";
}
}

回答(3):

楼主是要用到递归的吧

private void Search(Control con)
{
foreach (Control var in con.Controls)
{
MessageBox.Show(var.Name);
Search(var);自己掉自己是为递归
}
}

调用-测试,将当前窗体传入
private void button1_Click(object sender, EventArgs e)
{
Search(this);
}

回答(4):

foreach(control c in form.controls)
{
//得出来的是control 判断类型用typeof()
}