如何从动态创建的按钮事件中访问文本框

时间:2011-12-26 06:56:04

标签: c#

protected void Page_Load(object sender, EventArgs e)
    {
      for (int i = 0; i < list.Count; i++)
        {   Button lnk1 = new Button();
            lnk1.ID = "ln" + i;
             lnk1.Click += new EventHandler(lnk1_Click);
        }
        addButtons(ticketID);
    }
void lnk1_Click(object sender, EventArgs e)   
    {
        ViewState["btnId"] = (sender as Button).ID;
        string queryNo=(sender as Button).Text;
        addButtons(qNo);     

    }
 void addButtons(string buttonText)
    {
        if (ViewState["btnId"] == null)
            return;
       for (int i = 0; i < list.Count; i++)        
             {
            TextBox txt = new TextBox();

            txt.Visible = false;
            txt.ID = "TXT" + i;

            // now reply/block/unblock to particular advisor
            Button reply = new Button();
            Button block = new Button();
            reply.Width = 80;
            block.Width = 80;
            reply.ID = "RE" + i;
            reply.Click += new EventHandler(reply_Click);
            block.Click += new EventHandler(block_Click);
        }


    }
    void reply_Click(object sender, EventArgs e)   
    {
        ViewState["btnId"] = (sender as Button).ID;
    }

现在如何访问我在侧面reply_Click中的addbutton方法中创建的动态文本框,任何想法?

2 个答案:

答案 0 :(得分:0)

使用这种方式:

this.FindControl("textbox Id")

注意:在使用此命令之前,必须将其添加到您的页面

答案 1 :(得分:0)

此示例创建5个动态文本框和按钮,并在单击其相应按钮时找到文本框。

for( int i = 0; i < 5; i++ )
{
    TextBox tb = new TextBox();
    tb.ID = "txt" + i;
    this.Controls.Add( tb );

    Button btn = new Button();
    btn.ID = "btn" + i;
    this.Controls.Add( btn );

    btn.CommandArgument = i.ToString();

    btn.Command += ( sender, e )
    {
        string id = "txt" + e.CommandArgument;
        TextBox textBox = this.FindControl( id ) as TextBox;
    };
}

请注意FindControl不是递归的,因此请务必在您正在寻找的控件的直接父容器上调用它。

我使用匿名委托处理命令事件,但这可以放在控件创建循环之外。值得注意的是,必须通过命令参数将所有唯一信息传递给事件处理程序。

作为旁注,任何此类工作都不需要ViewState。