解决方案 »

  1.   

    没遇到过,
    我觉得是Label   lab1 = b as Label;这个有问题
      

  2.   

    MessageBox.Show("datagridview成功!");  你这也算找到控件??
    要DataGridView data = a as DataGridView; 判断 data是否等于null的,不等于null,说明找到了。
    另完全看不懂你遍历label中的if语句有什么意义。
      

  3.   

    不,它只是赋值了,并没有判断lab1是否等于null,所以这段代码没意义。
      

  4.   

    你这段代码找到Label也会报失败的。
      

  5.   

    虽然没看懂你的意图,本着得分的心态
    foreach (Panel pan in panel2.Controls)
                    {
                       
                        if (pan.Name == "pan" + i.ToString())
                        {
                            //遍历datagridview
                            foreach (Control a in pan.Controls)
                            {
                                if (a.Name.Trim() == "data" + i.ToString())
                                {
                                   DataGridView data = a as DataGridView;
                                   MessageBox.Show("datagridview成功!");
                                }
        else if (b.Name.Trim().ToLower() == "lab" + i.ToString())
                                {
                            //遍历label
                                    Label   lab1 = b as Label;
                                   MessageBox.Show("Label失败!")
                                }
                            }                    }
     
      

  6.   

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    foreach (Panel pan in panel2.Controls)
                    {
                        
                        if (pan.Name == "pan" + i.ToString())
                        {
                            //遍历datagridview
                            foreach (Control a in pan.Controls)
                            {
                                if (a.Name.Trim() == "data" + i.ToString())
                                {
                                   DataGridView data = a as DataGridView;
                                   MessageBox.Show("datagridview成功!");
                                }
                    else if (a.Name.Trim().ToLower() == "lab" + i.ToString())
                                {
                            //遍历label
                                    Label   lab1 = b as Label;
                                   MessageBox.Show("Label失败!")
                                }
                            }
     
                        }
      
     
      

  7.   

    可能是Label的父控件不是pan,而是另外一个可以嵌套Label的控件,这个控件的父控件可能才是pan,
    如果是这样,那么foreach  pan的子控件,当然是找不到Label了。
      

  8.   

    是的,比如pan里面嵌套着一个panel,panel里面有几个label,上面的代码是遍历不到的(这种情况,需要递归遍历)
    上面代码做的改掉,主要是忽略标签名大小写的问题
      

  9.   

    private void YouMethod(Control container)
    {
    ....foreach (Panel pan in panel2.Controls)
                    {
                        
                        if (pan.Name == "pan" + i.ToString())
                        {
                            //遍历datagridview
                            foreach (Control a in pan.Controls)
                            {
                                if (a.Name.Trim() == "data" + i.ToString())
                                {
                                   DataGridView data = a as DataGridView;
                                   MessageBox.Show("datagridview成功!");
                                }
                    else if (a.Name.Trim().ToLower() == "lab" + i.ToString())
                                {
                            //遍历label
                                    Label   lab1 = b as Label;
                                   MessageBox.Show("Label失败!")
                                }//递归
    if (a.HasChildren)
        YouMethod(a);
                            }
     
                        }
    ....
    }
      
     增加了递归遍历
      

  10.   

    第一次调用的时候
    YouMethod(panel2);private void YouMethod(Control container)
    {
    ....foreach (Panel pan in container.Controls)
                    {
                        
                        if (pan.Name == "pan" + i.ToString())
                        {
                            //遍历datagridview
                            foreach (Control a in pan.Controls)
                            {
                                if (a.Name.Trim() == "data" + i.ToString())
                                {
                                   DataGridView data = a as DataGridView;
                                   MessageBox.Show("datagridview成功!");
                                }
                    else if (a.Name.Trim().ToLower() == "lab" + i.ToString())
                                {
                            //遍历label
                                    Label   lab1 = b as Label;
                                   MessageBox.Show("Label失败!")
                                }//递归
    if (a.HasChildren)
        YouMethod(a);
                            }
     
                        }
    ....
    }
      
     
      

  11.   

    //遍历datagridview             
        foreach (Control a in pan.Controls)                        {//遍历label                   
         foreach (Control b in pan.Controls)
    你这注释不靠谱吖这明明遍历的东西一样所有pan.Controls
      

  12.   

    foreach (Panel pan in panel2.Controls)
                    {
                       
                        if (pan.Name == "pan" + i.ToString())
                        {
                            //遍历datagridview
                            foreach (Control a in pan.Controls)
                            {
                                if (a.Name == "data" + i.ToString())
                                {
                                   DataGridView data = a as DataGridView;
                                   MessageBox.Show("datagridview成功!");
                                }
                             
                            //遍历label
                         
                                if (a.Name == "lab" + i.ToString())
                                {
                                    Label   lab1 = a as Label;
                                   MessageBox.Show("Label失败!")
                                }
                            }
                        }把二个if 放在一起。应该就可以了。 可以试一下 。 在用typeof()  判断一下类型
      

  13.   

    label装在某个容器,而不是直接在窗体中,需要递归遍历下。
      

  14.   

     foreach (Control b in pan.Controls)
                            {
                                if (b.Name == "lab" + i.ToString())
                                {
                                    Label   lab1 = b as Label;
                                   MessageBox.Show("Label失败!")
                                }
                            }注意这行。  MessageBox.Show("Label失败!")
    你找到了。 是提示的失败。  
      

  15.   

    你这样遍历不行哦~~~就拿这段而言
    foreach (Control a in pan.Controls)                        
     {               
            if (a.Name == "data" + i.ToString())                  
             {                               
                     DataGridView data = a as DataGridView;                                
                     MessageBox.Show("datagridview成功!");                            
              }                        
     } 
    万一a的Name是data+i.ToString(),但它不是DataridView控件呢??我给你个webform的吧            System.Web.UI.WebControls.TextBox txt;
                System.Web.UI.WebControls.DropDownList ddl;
                foreach (Control MainControl in this.Page.Controls)
                {
                    foreach (Control objControl in MainControl.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();
      

  16.   

    你还要对比Control的类型吧!!