C# 关于控件的z-order(Z轴次序)属性(By dlm)

来源:互联网 发布:聚翔网络 编辑:程序博客网 时间:2024/05/01 07:52

有时候需要在程序运行到一定时候或者某个事件之后需要动态生成控件
在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 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 乐视1s玩王者荣耀卡怎么办 京东商城买东西发现地址错了怎么办 京东分期付款买手机额度不够怎么办 亮皮银色高跟鞋时间放久变色怎么办 饿了么商家钱包提现被锁了怎么办 在淘手游买的游戏账号被找回怎么办 交易猫买手游梦幻号被找回了怎么办 绑定着苹果账号的邮箱忘记了怎么办 京东注册账号跟密码都忘记了怎么办 孩子大学一个宿舍宿友不行怎么办 微信手机支付密码忘记了怎么办 微信公众号不能付款了怎么办 头条误点了投放头条广告怎么办 交行网银密码错误6次怎么办 宁波新冮厦关门我们的消费卡怎么办 第一天上班别人教的学不会怎么办 老公出轨已经不想跟你爱爱了怎么办 妻子出轨丈夫为了孩子不离婚怎么办 妻子出轨分居死也不愿意离婚怎么办 拼多多个人卖家登录密码忘了怎么办 微信被限制添加更多订阅号了怎么办 知网复制粘贴的论文有格式怎么办 知网论文查询网站密码忘记了怎么办 开通了超级会员不能克隆好友怎么办 偷了家里好多钱去买手机了怎么办 中行信用卡短信邀请办白金卡怎么办 注册邮箱说邮箱地址已被注册怎么办 便利店开在小区里面没生意怎么办 微信支付密码忘了怎么办没银行卡 中行5月扣很多钱是怎么办 中银淘宝校园卡影响征信问题怎么办 中银E盾快到期了怎么办 京东e卡电子卡卡密泄漏怎么办 买错了京东e卡怎么办 京东购买手机激活后有问题怎么办 优购m9锁屏密码忘记了怎么办视频 中百仓储的购物卡过期了怎么办 武汉中百超市购物卡过期怎么办 已认证抵扣的发票发生退货怎么办 京东白条分期买手机额度不够怎么办 京东白条闪付手机不支持开通怎么办