例子如下:
点击增加条件,会自动增加一行,如下:
代码如下:
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()了。
本文介绍如何在C#中动态添加ComboBox和TextBox控件,并提供了两种有效的方法来获取这些动态生成控件的值。
479

被折叠的 条评论
为什么被折叠?



