动态生成控件并取值
来源:互联网 发布:河南836软件孵化器 编辑:程序博客网 时间:2024/04/29 11:07
例子如下:
点击增加条件,会自动增加一行,如下:
代码如下:
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()了。
- 动态生成控件并取值
- 动态生成控件取值
- JQuery动态添加控件并取值
- Android动态生成控件如何取值
- 动态生成控件并定位
- 遍历控件并取值
- 动态生成控件 并捕捉事件
- vb.net动态生成控件并排版
- 动态生成控件并设置布局参数
- 在ASPX页面中动态加载ASCX控件,并取其值和给其赋值
- C#增加连续的动态控件并取值的例子
- C#增加连续的动态控件并取值的例子
- asp.net动态生成控件,并为控件绑定事件
- c#动态生成控件,并为控件注册事件
- 自定义控件生成与取值代码
- 动态创建控件和取值
- ASP.NET 后台动态生成CheckBOx控件并获取选中的值
- 如何动态生成页面控件,并取到值?(.net)
- VCC、VDD、VEE、VSS等有关电源标注的区别
- 编译问题 case expression not constant
- 【百科】逻辑代数
- 使用查找对话框后,另一对话框的位图背景加载失败
- android开发中经常看到@Override是什么意思呢?
- 动态生成控件并取值
- 面朝大海,春暖花开
- 软件工程视频学习笔记(三十七)
- 软件工程视频学习笔记(三十八)
- 软件工程视频学习笔记(三十九)
- 软件工程视频学习笔记(四十)
- 【资料整理】MEF
- 软件工程视频学习笔记(四十一)
- 软件工程视频学习笔记(四十二)