C#动态添加控件之后怎么进行取值

2024-11-30 13:53:08
推荐回答(3个)
回答1:

有时候需要在程序运行到一定时候或者某个事件之后需要动态生成控件 在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("");
        //将控件添加大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("");
    }
动态添加控件并添加事件 private void Page_Load(object sender, System.EventArgs e) { Button Button1 = new Button(); Button1.CommandArgument = b1; Button1.Text = Btn1; Button1.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(""); //将字符串转换成Web控件
   Control c4 = ParseControl("");
   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;
   };
} 

回答2:

如果你窗体上textbox类型的控件总是只有你添加的,那就可以用
foreach(control col in controls)
{
if(col is textbox)//如果要求不取空值,或者根据控件name取值之类的,在这里添加限制
{
//这里就是if筛选出来的textbox的值
}
}

回答3:

取什么值?你动态添加的TextBox控件中的文本?
取第一个TextBox中的文本代码如下,其它的代码类似:
foreach(Control control in this.Controls)
if(control is TextBox && control.Name=="t1")
return ((TextBox)control).Text;
也可以用FindControl之类的方法,希望对你有帮助,还有疑问请追问或是Hi