在NET中如何动态添加控件,并设置控件属性以及获得控件的属性呢?
首先说明:动态添加控件,最好把生成的控件添加到容器里面,以下介绍动态生成的控件,都添加到Panel对象里面,为什么这样做呢?是为了方便控制显示位置与查找并获得控件值,以便对其进行相关的操作!
在考试系统中经常使用到动态控件,以下作详细说明:
1:首先在页面中添加一个静态固定的Panel,操作方法很简单,从工具箱里面直接将该控件拖入适当位置就行,给其ID取个名字,本例ID为:p1
2:根据需要动态添加控件到Panel里面,以下为代码生成过程(以生成CheckBoxList对象为例):
CheckBoxList cb = new CheckBoxList();
cb.EnableViewState = true;//当页面中有回发操作时,仍然保持其操作值
cb.ID = "cb1";
for(int i=1;i<=8;i++)//使用循环生成8个CheckBoxList并设置其标签分别为A,B..H
{
cb.Items.Add(Convert.ToChar('A'+(i-1)).ToString());
}
this.p1.Controls.Add(cb);
好了,已生成动态控件,如果想生成多个同样的控件,请在外面使用循环操作;
3:如何对生成的动态控件CheckBoxList 进行操作:
CheckBoxList cb = new CheckBoxList();//定义控件类别
cb = (CheckBoxList)p1.FindControl("cb1");//查找刚才定义的控件ID
for(int j=0;j<cb.Items.Count;j++)//通过循环,查找该控件的选项!
{
if(cb.Items[j].Selected == true)//查找控件的哪些选项被选中了!
{
//执行相关的操作!
}
}
问题已结束!
分析:很多网友经常遇到这样的情况,动态添加控件之后,当第一次载入页面时能够看到显示的控件,但是,当页面出现回发操作时,就找不到控件了,原因是:在页面载入时,使用了这样的代码:
if (!IsPostBack)
{
//动态生成控件函数
}
诸不知,实际上并不需要这个判断语句的,直接生成,当页面重新载入时,也需要重新执行动态生成控件函数;
其次,尽量使用容器类的控件容纳动态生成的控件,否则会造成这些控件在页面中无法定位的问题!