寻找动态产生的控件 return 你单步调试了吗?return 就是直接返回了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果你递归调用 findControls(myctr, DGVName) ,你总要判断一下返回值吧。 我也觉得很奇怪~应该要在if (((DataGridView)myctr).Name.Equals(DGVName)==True)这里 return 才对,但是我单步调试的结果并不会在这里离开,程序依旧继续foreach 真奇怪?? 就像@sp1234说的,你递归调用findControls的时候,返回值被忽略了,所以递归中找到的结果就被抛弃了。而且ControlCollection上也提供了Find方法,ctr.Controls.Find(DGVName, true).FirstOrDefault() 应该就是要找的DataGridView 你return之后,会走到findControls(myctr, DGVName);这里话说,你真的是单步F10调试,而不是F5直接跑到断点吗,应该很明显才对 感谢大家的帮忙,我将程式改为这样以可以达到我想要得结果了,谢谢协助~ public DataTable findControls(Control ctr, string DGVName) { DataTable tmp_dt = new DataTable(); if (ctr.Controls.Find(DGVName , true).Length > 0) { tmp_dt = (DataTable)((DataGridView)ctr.Controls.Find(DGVName , true)[0]).DataSource; return tmp_dt; } return tmp_dt; } 代码颠倒下位置 //寻找动态产生的控件 public DataTable findControls(Control ctr, string DGVName ) { DataTable tmp_dt = new DataTable(); foreach (Control myctr in ctr.Controls) { if (myctr is DataGridView) { if (((DataGridView)myctr).Name.Equals(DGVName)) { tmp_dt = (DataTable)((DataGridView)myctr).DataSource; return tmp_dt; } } //如果传进来的控件有子控件的话 if (myctr.HasChildren == true) { //就递归调用自己 findControls(myctr, DGVName); } } return tmp_dt; } 别忘记 //就递归调用自己 return findControls(myctr, DGVName); to : china_ggd 兄谢谢你~但我试过F11逐步调试一样不行喔,我快放弃这样的写法了,我的容器结构是 Form >splitContainer1.Panel2 > tabControl1 > > tabPage >DataGridView我是觉得github_22161131 #4楼提的简洁有力~ ASP.net登陆弹窗问题 对文件和文件夹的 复制 删除 移动 重命名 这个C++ Struct怎么转换为C#的形式? 证书认证体系 C#和MYSQL数据库连接的问题! 如何解决MDI子窗口最大化后标题栏显示在父窗口的菜单栏之上? WPF程序,适合用NHibernate之类的框架吗? 一个程序如何向另一个进程发送一个消息,并取回一个字符串? 在Web应用程序中怎样写系统日志? 怎样生成一个.net程序,使他在不装.net的机器上运行阿。 求帮忙解释下C#链表中头引用head的相关意思? 我想在多行文本框中做上面显示表达式下面显示结果的效果,怎么做
这里 return 才对,但是我单步调试的结果并不会在这里离开,程序依旧继续foreach 真奇怪??
而且ControlCollection上也提供了Find方法,ctr.Controls.Find(DGVName, true).FirstOrDefault() 应该就是要找的DataGridView
findControls(myctr, DGVName);
这里
话说,你真的是单步F10调试,而不是F5直接跑到断点吗,应该很明显才对
{
DataTable tmp_dt = new DataTable();
if (ctr.Controls.Find(DGVName , true).Length > 0)
{
tmp_dt = (DataTable)((DataGridView)ctr.Controls.Find(DGVName , true)[0]).DataSource;
return tmp_dt;
}
return tmp_dt;
}
//寻找动态产生的控件
public DataTable findControls(Control ctr, string DGVName )
{
DataTable tmp_dt = new DataTable();
foreach (Control myctr in ctr.Controls)
{
if (myctr is DataGridView)
{
if (((DataGridView)myctr).Name.Equals(DGVName))
{
tmp_dt = (DataTable)((DataGridView)myctr).DataSource;
return tmp_dt;
}
}
//如果传进来的控件有子控件的话
if (myctr.HasChildren == true)
{
//就递归调用自己
findControls(myctr, DGVName);
}
}
return tmp_dt;
}
//就递归调用自己
return findControls(myctr, DGVName);
谢谢你~但我试过F11逐步调试一样不行喔,我快放弃这样的写法了,我的容器结构是
Form >splitContainer1.Panel2 > tabControl1 > > tabPage >DataGridView
我是觉得github_22161131 #4楼提的简洁有力~