C#动态添加控件的方法

有时候需要在程序运行到一定时候或者某个事件之后需要动态生成控件
在C#下一般方式是:

private Button Db=new Button() ;
Db.Name="Dy_Button" //设定名称
Db.Location=new Point(100,200);//设定位置
。。。。//其他属性设置

//这里添加消息处理
。。
this.Controls.Add (Db);//添加到控件组中

这样就完成了动态生成但是需要给控件添加消息处理事件
那么现在就需要在生成控件添加到控件组前增加如下语句:

Dpb.MouseClick += new EventHandler(this.pictureBox_MouseClick);

现在编写这个消息处理的函数pictureBox_Click()

private void pictureBox_MouseClick(object sender,EventArgs e)
{
MessageBox.Show("click");
}
这样完成了事件处理的添加


首先,创建一个全局变量"i "用来区分各个新的按钮:
private int i=0;
然后在已有的按钮中添加方法如下:
private void button1_Click(object sender, System.EventArgs e)
{
i++;
Button b = new Button();//创建一个新的按钮
b.Name="b"+i;//这是我用来区别各个按钮的办法
System.Drawing.Point p = new Point(12,13+i*30);//创建一个坐标,用来给新的按钮定位
b.Location = p;//把按钮的位置与刚创建的坐标绑定在一起

panel1.Controls.Add(b);//向panel中添加此按钮
b.Click += new System.EventHandler(btn_click);//将按钮的方法绑定到按钮的单击事件中b.Click是按钮的单击事件
}
完成以上步骤就已经可以进行动态按钮的创建
下面我们来讲如何对新建的按钮添加对应的事件方法btn_click():
private void btn_click(object sender, System.EventArgs e)
{
Button b1 = (Button)sender;//将触发此事件的对象转换为该Button对象

MessageBox.Show(""+b1.Name);
}
至此就已经完成了动态创建按钮和事件
asp.net为控件动态添加事件 

实现的功能是在网页上的Panel中动态添加一个Button,并为这个Button写一个单击事件。

动态添加控件的事件,语句: 

Code
Control.Command += new CommandEventHandler(this.EventFun);

具体的代码请看下面:

需要特别注意的是:

添加控件和给控件加事件时绝对不能放到 if(!IsPostback){}里面,那样的话,点击一次后控件会消失,而且事件也不

会执行。

Code
protected void Page_Load(object sender, EventArgs e)
{
//将输入字符串分析为System.Web.UI.Control对象,b为传进去的值
Control c = ParseControl("<asp:Button Text = '按我' ID = 'myButton' commandargument = 'b' runat = 'server' />");

//将控件添加大Panel中
this.Panel1.Controls.Add(c); 

//查找页面名为myButton的控件
Button Button = (Button)Page.FindControl("myButton"); 

//添加事件On_Button
Button.Command += new CommandEventHandler(this.On_Button);

}

//CommandEventArgs为command事件提供数据
protected void On_Button(Object sender,CommandEventArgs e)
{
Response.Write("<script language = 'javascript' type = 'text/javascript'>alert('" + e.CommandArgument.ToString() + "');</script>");
}
http://www.cnblogs.com/zhuimengke/articles/1283973.html
http://www.cnblogs.com/xuasmi/

动态添加控件并添加事件 分类:asp.net2007.5.15 22:48 作者:小怪物 | 评论:1 | 阅读:1393 
private void Page_Load(object sender, System.EventArgs e)
{
Button Button1 = new Button();
Button1.CommandArgument = "b1";
Button1.Text = "Btn1";
Button1.Command += new CommandEventHandler(this.OnButton); 
PlaceHolder1.Controls.Add(Button1); 
Button Button2 = new Button();
Button2.CommandArgument = "b2";
Button2.Text = "Btn2";
Button2.Command += new CommandEventHandler(this.OnButton); 
PlaceHolder1.Controls.Add(Button2); 


Control c3 = ParseControl("<asp:Button id='Button3' text='Btn3' commandname='Btn' commandargument='b3' runat='server' />"); //将字符串转换成web控件
Control c4 = ParseControl("<asp:Button id='Button4' text='Btn4' commandname='Btn' commandargument='b4' runat='server' />"); 
PlaceHolder1.Controls.Add(c3); 
PlaceHolder1.Controls.Add(c4); 
Button myBut = (Button)Page.FindControl("Button3"); 
myBut.Command += new CommandEventHandler(this.OnButton); 
Button myBut2 = (Button)Page.FindControl("Button4"); 
myBut2.Command += new CommandEventHandler(this.OnButton); 

}
public void OnButton(Object Sender, CommandEventArgs e) 

switch (e.CommandArgument.ToString().ToLower()) 

case "b1": 
Label1.Text = "Button 1"; 
break; 
case "b2": 
Label1.Text = "Button 2"; 
break; 
case "b3": 
Label1.Text = "Button 3"; 
break; 
case "b4": 
Label1.Text = "Button 4"; 
break; 
}; 


这几天忙,好久没上来了,今天项目基本完了,可以轻松下了。明天周末,呵呵。
我项目中遇到的是动态创建Tab选项卡和Gridview,按下面的方法可以,创建它们当然在page_load里了,有时,它会引起你页面上其它的按钮用不了,这时,你可以把它们不放在page_load里,而放在page_init里,这样就不会有问题了,我不知其它的Ajax控件会不会有这样的问题,我创建TabPanel时,就出现异常。我把它们放在Page_Init里就不会这样了。

动态添加AjaxControl Toolkit的Tab控件及设置模板 

有朋友在使用AjaxControl Toolkit里的Tab控件,他刚刚问怎么实现在cs里动态添加TabPanel项。我建了一个项目试了一下。主要问题是TabPanel里如何创建ContentTemplate。

<ajaxToolkit:TabContainer>控件使用方法比较简单,直接拖到页面上,添加TabPanel,然后直接输入 TabPanel的内容就可以了,控件完全支持设计时的WYSIWYG,非常方便。TabPanel里的内容是通过<contenttemplate></contenttemplate>来指定的。这个对应于TabPanel的 ContentTemplate属性,VS里intellisense显示它的类型是ITemplate,这是一个接口,我试着在 intellisense里找找有没有类实现了这个接口,但一无所获。找不到这个类,就没有办法给ContentTemplate赋值。于是查看了一下 Tab控件的源码,又查阅了MSDN,终于把问题解决了。

问题关键就在于这个实现了ITemplate接口的类,我找不到,只好自己写了一个。也不知道有没有别的方法,希望有知道的朋友告诉我。全部代码如下:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using AjaxControlToolkit; //记得加上这个啊

public partial class _Default : System.Web.UI.Page 
{
protected void Page_Load(object sender, EventArgs e)
{
TabContainer tabContainer1 = new TabContainer();
TabPanel tab1 = new TabPanel();
tab1.HeaderText = "标签1";
tabContainer1.Tabs.Add(tab1);
TabPanel tab2 = new TabPanel();
tab2.HeaderText = "标签2";
tabContainer1.Tabs.Add(tab2);

//建立第一个Tab里的内容
Panel panel1 = new Panel();

Label label1 = new Label();
label1.Text = "这是第一个Tab";

panel1.Controls.Add(label1);

//创建一个Template
TabContentTemplate temp1 = new TabContentTemplate();
//添加子控件
temp1.SetTemplate(panel1);

tab1.ContentTemplate = temp1;
this.form1.Controls.Add(tabContainer1);
}


}

public class TabContentTemplate : ITemplate
{
private Control _template;

public void SetTemplate(Control templateControl)
{
_template = templateControl;
}

ITemplate Members#region ITemplate Members

public void InstantiateIn(Control container)
{
container.Controls.Add(_template);
}

#endregion
}
很多控件,如GridView、Repeat等都使用了Template,应该也都可以按这种方法来实现动态设置模板了。

BTW,另外还有一种方法动态设置模板,就是使用Page.LoadTemplate("template.ascx"),如tab1.ContentTemplate=Page.LoadTemplate("template.ascx")

 

 

 

 

 

C#开发中有这样一种情况,当用户在注册的时候,如果要根据用户选择的会员类型的不同来收集用户不同的信息,再详细点吧:比如会员类型有:VIP会员和普通会员,这两种不同的类型在会员注册时要收集的信息不同,如:Vip会员比普通会员多收集三个字段的信息,那我们是不是犯不着为了这三个字段用不同的注页界面来解决这个问题呢?肯定还有其他方法,我中用控件动态添加的方法来解决的,当然,为了程序的延展性,我一并把动态删除C#控件的方法也写上:

动态添加C#控件的方法:请你自已举一反三

public void addtxt(int n) 

TextBox[] txt = new TextBox[5]; 
for (int i = 0; i < 5; i++) 

txt[i] = new TextBox(); 
txt[i].Name = txt + i.ToString();
txt[i].Text = "测试控件"+i.ToString();
txt[i].Location = new Point(48 + 30 * i, 64 + 30 * i);
txt[i].Size = new Size(50, 16);
Controls.Add(txt[i]); 
}
}

删除方法那就比较简单了:请看如下代码 ,就是对应删除刚才新建的那5个C#控件

foreach(TextBox c in txt)
{
this.Controls.Remove(c);
}

本例所讲述的动态添加和动态删除C#控件,我没有在b/s环境下测试过,而是在Winform的软件开发中测试通过的,谢谢阅读

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值