2

任务是计算网络表单中的点击次数。

这是代码。

public partial class _default : System.Web.UI.Page
    {
        int count = 1;
        private void Page_Load(object sender, System.EventArgs e)
        {
            Button btn = new Button();
            btn.Text = "Click Me";
            btn.Click  += btn_Click;
            Label lbl = new Label();
            form1.Controls.Add(btn);
            form1.Controls.Add(lbl);


        }

        protected void btn_Click(object sender, EventArgs e)
        {
            count++;
            //Label1.Text = count.ToString();

        }
    }

问题是btn_Click()内部无法识别lbl ...我无法弄清楚...有人可以建议吗?

4

2 回答 2

4

您需要在 page_load 方法之外声明 lbl ,而不是像这样在单击按钮时可用。

Label lbl ;
int count = 1;

private void Page_Load(object sender, System.EventArgs e)
{
    Button btn = new Button();
    btn.Text = "Click Me";
    btn.Click  += btn_Click;
    lbl = new Label();
    form1.Controls.Add(btn);
    form1.Controls.Add(lbl);
}

protected void btn_Click(object sender, EventArgs e)
{
    count++;
    if(lbl !=null)
      lbl.Text = count.ToString();            
}

因为如果您在变量的 page_load 范围内创建标签,则仅限于该方法。因此,您可以像我一样在方法之外声明标签,也可以将 id 赋予标签,然后使用FindControl方法搜索它。

于 2012-10-04T05:42:17.957 回答
2

ASPX:

<form id="form1" runat="server">
    <div>
        <asp:Button ID="btn" runat="server" OnClick="btn_Click" Text="Button" />
        <asp:Label id="lbl" runat="server" />
    </div>
</form>

代码隐藏(C#):

int count = 1;

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        lbl.Text = count.ToString();
    }
}

protected void btn_Click(object sender, EventArgs e)
{
    if (int.TryParse(lbl.Text, out count))
    {                
        lbl.Text = (++count).ToString();
    }
}
于 2012-10-04T06:12:33.950 回答