关于C#动态添加控件取值问题

关于C#动态添加控件取值问题,第1张

用递归来遍历:

privatevoid FindControl(Controlc){if(c is TextBox){//控件是TextBox}elseif (c is DropDownList){ //控件是DropDownList}if(c.Controls != null){foreach (Control xin c.Controls){FindControl(x) }}} 调用: this.FindControl(this)

具体代码如下:

1

2

3

4

5

6

7

8

foreach(Control c in Controls)

{

temp=c as TextBox

if(temp!=null)

{

messagebox.show(temp.Name)

}

}

用is效率高一些,毕竟用as是类型转换。

有时候需要在程序运行到一定时候或者某个事件之后需要动态生成控件 在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//将触发此事

完成以上步骤就已经可以进行动态按钮的创建

下面来讲如何对新建的按钮添加对应的事件方法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写一个单击事件。

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

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

具体的代码请看下面:

需要特别注意的是:

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

会执行。

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>")

  }

动态添加控件并添加事件 private void Page_Load(object sender, System.EventArgs e) { Button Button1 = new Button()Button1.CommandArgument = b1Button1.Text = Btn1Button1.Command += new CommandEvent

动态添加控件并添加事件

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

}

} 


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11572526.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存