例子如下:
点击增加条件,会自动增加一行,如下:
代码如下:
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);
}
}
{
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;
}
{
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 (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";
{
if (contr.Name.CompareTo( "字段comboBox" + i.ToString()) == 0)
return contr.Text;
}
return "0";
有一个问题,我在编写时不能使用FindControl()这个函数!不知道为什么??
答:要使用类似的方法定义:System.Web.UI.WebControls.Button Button1;
然后就可以使用Button1.FindControl()了。