动态生成控件并取值

例子如下:

<!--StartFragment -->
点击增加条件,会自动增加一行,如下:
<!--StartFragment -->
代码如下:
private void增加条件button_Click( objectsender,EventArgse)
{
count+= 1;
h+= 26;
if(count> 7)MessageBox.Show( this, "已经无法增加!!");
else
{
ComboBoxCBox1= newComboBox();
for( inti= 0;i<Tablelength;i++)
CBox1.Items.Add(TableCaption[i]);
CBox1.Left= 17;
CBox1.Top=h;
Sizesize1= newSize();
size1.Width= 109;
size1.Height= 20;
CBox1.Size=size1;
CBox1.Name= "字段comboBox"+count.ToString();
//CBox1.Click+=newEventHandler(CBox1_Click);
this.panel1.Controls.Add(CBox1);
ComboBoxCBox2= newComboBox();
for( inti= 0;i< 8;i++)
CBox2.Items.Add(Condition[i]);
CBox2.Left= 132;
CBox2.Top=h;
Sizesize2= newSize();
size2.Width= 62;
size2.Height= 20;
CBox2.Size=size2;
CBox2.Name= "条件comboBox"+count.ToString();
this.panel1.Controls.Add(CBox2);
TextBoxTBox3= newTextBox();
TBox3.Left= 200;
TBox3.Top=h;
Sizesize3= newSize();
size3.Width= 100;
size3.Height= 21;
TBox3.Size=size3;
TBox3.Name= "值textBox"+count.ToString();
this.panel1.Controls.Add(TBox3);
ComboBoxCBox4= newComboBox();
for( inti= 0;i< 2;i++)
CBox4.Items.Add(Logic[i]);
CBox4.Left= 307;
CBox4.Top=h;
Sizesize4= newSize();
size4.Width= 63;
size4.Height= 20;
CBox4.Size=size4;
CBox4.Name= "逻辑comboBox"+count.ToString();
this.panel1.Controls.Add(CBox4);
}
}
这样就完成了动态增加控件的功能,但是要获取值,又遇到问题!因为控件是动态生成的,原先不存在,所以不能以动态生成后的Name属性来获取.
以下是网上找到的两种获取方法:
一、
private stringfind_1( inti)
{
return((ComboBox)panel1.Controls.Find( "字段comboBox"+i.ToString(), true)[ 0]).Text;
}
private stringfind_2( inti)
{
return((ComboBox)panel1.Controls.Find( "条件comboBox"+i.ToString(), true)[ 0]).Text;
}
private stringfind_3( inti)
{
return((TextBox)panel1.Controls.Find( "值textBox"+i.ToString(), true)[ 0]).Text;
}
private stringfind_4( inti)
{
stringstr=((ComboBox)panel1.Controls.Find( "逻辑comboBox"+i.ToString(), true)[ 0]).Text;
if(str== "并且")str="and ";
elsestr= "or";
returnstr;
}
((ComboBox)panel1.Controls.Find( "字段comboBox"+i.ToString(), true)[ 0]).Text;这条语句表示在panel1控件中找动态生成的子控件,Find()的第一个参数是控件名,第二个参数是布尔值。后面的“[0]”表示查找到的控件是一个数据,也就是有可能有多个,只选择第一个。
二、也可以用以下方法
private stringfind_1( inti)
{
foreach(System.Windows.Forms.Controlcontr inpanel1.Controls)
{

if(contr.Name.CompareTo( "字段comboBox"+i.ToString())== 0)
returncontr.Text;
}
return "0";
}
private stringfind_2( inti)
{
foreach(System.Windows.Forms.Controlcontr inpanel1.Controls)
{

if(contr.Name.CompareTo( "条件comboBox"+i.ToString())== 0)
returncontr.Text;
}
return "0";
}
private stringfind_3( inti)
{
foreach(System.Windows.Forms.Controlcontr inpanel1.Controls)
{

if(contr.Name.CompareTo( "值textBox"+i.ToString())== 0)
returncontr.Text;

}
return "0";
}
private stringfind_4( inti)
{
foreach(System.Windows.Forms.Controlcontr inpanel1.Controls)
{

if(contr.Name.CompareTo( "逻辑comboBox"+i.ToString())== 0)
{
if(contr.Text== "并且")contr.Text="and ";
elsecontr.Text= "or";
returncontr.Text;
}
}
return "0";
}
用foreach()语句来遍历panel1控件中的动态生成的子控件,如果找到相同名字的,就返回该控件的值
foreach(System.Windows.Forms.Controlcontr inpanel1.Controls)
{

if(contr.Name.CompareTo( "字段comboBox"+i.ToString())== 0)
returncontr.Text;
}
return "0";
有一个问题,我在编写时不能使用FindControl()这个函数!不知道为什么??
答:要使用类似的方法定义:System.Web.UI.WebControls.Button Button1;
然后就可以使用Button1.FindControl()了。

你可能感兴趣的:(UI,windows,Web)