问题描述
foreach(Panelpaninpanel2.Controls){if(pan.Name=="pan"+i.ToString()){//遍历datagridviewforeach(Controlainpan.Controls){if(a.Name=="data"+i.ToString()){DataGridViewdata=aasDataGridView;MessageBox.Show("datagridview成功!");}}//遍历labelforeach(Controlbinpan.Controls){if(b.Name=="lab"+i.ToString()){Labellab1=basLabel;MessageBox.Show("Label失败!")}}}
那么问题来了,为什么遍历DataGridView就能成功找到控件、Label就不行呢???求指点
解决方案
解决方案二:
没遇到过,我觉得是Labellab1=basLabel;
这个有问题
解决方案三:
MessageBox.Show("datagridview成功!");你这也算找到控件??要DataGridViewdata=aasDataGridView;判断data是否等于null的,不等于null,说明找到了。另完全看不懂你遍历label中的if语句有什么意义。
解决方案四:
引用1楼u010379510的回复:
没遇到过,我觉得是Labellab1=basLabel;这个有问题
不,它只是赋值了,并没有判断lab1是否等于null,所以这段代码没意义。
解决方案五:
你这段代码找到Label也会报失败的。
解决方案六:
虽然没看懂你的意图,本着得分的心态foreach(Panelpaninpanel2.Controls){if(pan.Name=="pan"+i.ToString()){//遍历datagridviewforeach(Controlainpan.Controls){if(a.Name.Trim()=="data"+i.ToString()){DataGridViewdata=aasDataGridView;MessageBox.Show("datagridview成功!");}elseif(b.Name.Trim().ToLower()=="lab"+i.ToString()){//遍历labelLabellab1=basLabel;MessageBox.Show("Label失败!")}}}
解决方案七:
1234567891011121314151617181920212223foreach(Panelpaninpanel2.Controls){if(pan.Name=="pan"+i.ToString()){//遍历datagridviewforeach(Controlainpan.Controls){if(a.Name.Trim()=="data"+i.ToString()){DataGridViewdata=aasDataGridView;MessageBox.Show("datagridview成功!");}elseif(a.Name.Trim().ToLower()=="lab"+i.ToString()){//遍历labelLabellab1=basLabel;MessageBox.Show("Label失败!")}}}
解决方案八:
可能是Label的父控件不是pan,而是另外一个可以嵌套Label的控件,这个控件的父控件可能才是pan,如果是这样,那么foreachpan的子控件,当然是找不到Label了。
解决方案九:
引用7楼LanMangFeiGe的回复:
可能是Label的父控件不是pan,而是另外一个可以嵌套Label的控件,这个控件的父控件可能才是pan,如果是这样,那么foreachpan的子控件,当然是找不到Label了。
是的,比如pan里面嵌套着一个panel,panel里面有几个label,上面的代码是遍历不到的(这种情况,需要递归遍历)上面代码做的改掉,主要是忽略标签名大小写的问题
解决方案十:
privatevoidYouMethod(Controlcontainer){....foreach(Panelpaninpanel2.Controls){if(pan.Name=="pan"+i.ToString()){//遍历datagridviewforeach(Controlainpan.Controls){if(a.Name.Trim()=="data"+i.ToString()){DataGridViewdata=aasDataGridView;MessageBox.Show("datagridview成功!");}elseif(a.Name.Trim().ToLower()=="lab"+i.ToString()){//遍历labelLabellab1=basLabel;MessageBox.Show("Label失败!")}//递归if(a.HasChildren)YouMethod(a);}}....}
增加了递归遍历
解决方案十一:
第一次调用的时候YouMethod(panel2);privatevoidYouMethod(Controlcontainer){....foreach(Panelpanincontainer.Controls){if(pan.Name=="pan"+i.ToString()){//遍历datagridviewforeach(Controlainpan.Controls){if(a.Name.Trim()=="data"+i.ToString()){DataGridViewdata=aasDataGridView;MessageBox.Show("datagridview成功!");}elseif(a.Name.Trim().ToLower()=="lab"+i.ToString()){//遍历labelLabellab1=basLabel;MessageBox.Show("Label失败!")}//递归if(a.HasChildren)YouMethod(a);}}....}
解决方案十二:
找控件还是根据类型找比较可靠
解决方案十三:
//遍历datagridviewforeach(Controlainpan.Controls){//遍历labelforeach(Controlbinpan.Controls)你这注释不靠谱吖。。。这明明遍历的东西一样。。。所有pan.Controls
解决方案十四:
foreach(Panelpaninpanel2.Controls){if(pan.Name=="pan"+i.ToString()){//遍历datagridviewforeach(Controlainpan.Controls){if(a.Name=="data"+i.ToString()){DataGridViewdata=aasDataGridView;MessageBox.Show("datagridview成功!");}//遍历labelif(a.Name=="lab"+i.ToString()){Labellab1=aasLabel;MessageBox.Show("Label失败!")}}}
把二个if放在一起。应该就可以了。可以试一下。在用typeof()判断一下类型
解决方案十五:
label装在某个容器,而不是直接在窗体中,需要递归遍历下。
解决方案:
foreach(Controlbinpan.Controls){if(b.Name=="lab"+i.ToString()){Labellab1=basLabel;MessageBox.Show("Label失败!")}}
注意这行。MessageBox.Show("Label失败!")你找到了。是提示的失败。
解决方案:
你这样遍历不行哦~~~就拿这段而言foreach(Controlainpan.Controls){if(a.Name=="data"+i.ToString()){DataGridViewdata=aasDataGridView;MessageBox.Show("datagridview成功!");}}万一a的Name是data+i.ToString(),但它不是DataridView控件呢??我给你个webform的吧System.Web.UI.WebControls.TextBoxtxt;System.Web.UI.WebControls.DropDownListddl;foreach(ControlMainControlinthis.Page.Controls){foreach(ControlobjControlinMainControl.Controls){if(objControl.GetType().ToString()=="System.Web.UI.WebControls.TextBox"){txt=(System.Web.UI.WebControls.TextBox)objControl;if(txt.ClientID!="txtWorker_No"&&txt.ClientID!="txtChecker_No"&&txt.ClientID!="txtWork_Dt"&&txt.ClientID!="txtTemp"&&txt.ClientID!="txtChecker_Nm"&&txt.ClientID!="txt_SureNm"&&txt.ClientID!="txtSign_Nm"&&txt.ClientID!="txtWorker_Nm"){txt.Text="";}}if(objControl.GetType().ToString()=="System.Web.UI.WebControls.DropDownList"){ddl=(System.Web.UI.WebControls.DropDownList)objControl;if(ddl.ClientID!="ddl_Shift"&&ddl.ClientID!="ddlPlant_Site_Cd"){ddl.SelectedIndex=-1;}}}}this.txtS_No.Focus();
解决方案:
你还要对比Control的类型吧!!