动态生成控件并取值

例子如下:

点击增加条件,会自动增加一行,如下:
代码如下:
         private  void 增加条件button_Click( object sender, EventArgs e) 
        { 
            count +=  1
            h +=  26
             if (count >  7) MessageBox.Show( this"已经无法增加!!"); 
             else 
            { 
                ComboBox CBox1 =  new ComboBox(); 
                 for ( int i =  0; i < Tablelength; i++) 
                    CBox1.Items.Add(TableCaption[i]); 
                CBox1.Left =  17
                CBox1.Top = h; 
                Size size1 =  new Size(); 
                size1.Width =  109
                size1.Height =  20
                CBox1.Size = size1; 
                CBox1.Name =  "字段comboBox" + count.ToString(); 
  //               CBox1.Click += new EventHandler(CBox1_Click); 
                 this.panel1.Controls.Add(CBox1); 
                ComboBox CBox2 =  new ComboBox(); 
                 for ( int i =  0; i <  8; i++) 
                    CBox2.Items.Add(Condition[i]); 
                CBox2.Left =  132
                CBox2.Top = h; 
                Size size2 =  new Size(); 
                size2.Width =  62
                size2.Height =  20
                CBox2.Size = size2; 
                CBox2.Name =  "条件comboBox" + count.ToString(); 
                 this.panel1.Controls.Add(CBox2); 
                TextBox TBox3 =  new TextBox(); 
                TBox3.Left =  200
                TBox3.Top = h; 
                Size size3 =  new Size(); 
                size3.Width =  100
                size3.Height =  21
                TBox3.Size = size3; 
                TBox3.Name =  "值textBox" + count.ToString(); 
                 this.panel1.Controls.Add(TBox3); 
                ComboBox CBox4 =  new ComboBox(); 
                 for ( int i =  0; i <  2; i++) 
                    CBox4.Items.Add(Logic[i]); 
                CBox4.Left =  307
                CBox4.Top = h; 
                Size size4 =  new Size(); 
                size4.Width =  63
                size4.Height =  20
                CBox4.Size = size4; 
                CBox4.Name =  "逻辑comboBox" + count.ToString(); 
                 this.panel1.Controls.Add(CBox4); 
            } 
        } 
这样就完成了动态增加控件的功能,但是要获取值,又遇到问题!因为控件是动态生成的,原先不存在,所以不能以动态生成后的Name属性来获取.
以下是网上找到的两种获取方法:
一、
         private  string find_1( int i) 
        { 
             return ((ComboBox)panel1.Controls.Find( "字段comboBox" + i.ToString(),  true)[ 0]).Text; 
        } 
         private  string find_2( int i) 
        { 
             return ((ComboBox)panel1.Controls.Find( "条件comboBox" + i.ToString(),  true)[ 0]).Text; 
        } 
         private  string find_3( int i) 
        { 
             return ((TextBox)panel1.Controls.Find( "值textBox" + i.ToString(),  true)[ 0]).Text; 
        } 
         private  string find_4( int i) 
        { 
             string str = ((ComboBox)panel1.Controls.Find( "逻辑comboBox" + i.ToString(),  true)[ 0]).Text; 
             if (str ==  "并且") str = "and "; 
             else str =  "or"
             return str; 
        } 
((ComboBox)panel1.Controls.Find( "字段comboBox" + i.ToString(),  true)[ 0]).Text;这条语句表示在panel1控件中找动态生成的子控件,Find()的第一个参数是控件名,第二个参数是布尔值。后面的“[0]”表示查找到的控件是一个数据,也就是有可能有多个,只选择第一个。
二、也可以用以下方法
        private  string find_1( int i) 
        { 
             foreach (System.Windows.Forms.Control contr  in panel1.Controls) 
            { 
 
                 if (contr.Name.CompareTo( "字段comboBox" + i.ToString()) ==  0
                     return contr.Text; 
            } 
             return  "0"
        } 
         private  string find_2( int i) 
        { 
             foreach (System.Windows.Forms.Control contr  in panel1.Controls) 
            { 
 
                 if (contr.Name.CompareTo( "条件comboBox" + i.ToString()) ==  0
                     return contr.Text; 
            } 
             return  "0"
        } 
         private  string find_3( int i) 
        { 
             foreach (System.Windows.Forms.Control contr  in panel1.Controls) 
            { 
 
                 if (contr.Name.CompareTo( "值textBox" + i.ToString()) ==  0
                     return contr.Text; 
 
            } 
             return  "0"
        } 
         private  string find_4( int i) 
        { 
             foreach (System.Windows.Forms.Control contr  in panel1.Controls) 
            { 
 
                 if (contr.Name.CompareTo( "逻辑comboBox" + i.ToString()) ==  0
                { 
                     if(contr.Text== "并且") contr.Text="and "; 
                     else contr.Text= "or"
                     return contr.Text; 
                } 
            } 
             return  "0"
        } 
用foreach()语句来遍历panel1控件中的动态生成的子控件,如果找到相同名字的,就返回该控件的值
             foreach (System.Windows.Forms.Control contr  in panel1.Controls) 
            { 
 
                 if (contr.Name.CompareTo( "字段comboBox" + i.ToString()) ==  0
                     return contr.Text; 
            } 
             return  "0"
有一个问题,我在编写时不能使用FindControl()这个函数!不知道为什么??
答:要使用类似的方法定义:System.Web.UI.WebControls.Button Button1;
      然后就可以使用Button1.FindControl()了。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值