2

タスクは、Webフォームのクリック数をカウントすることです。

これがコードです。

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();

        }
    }

問題は、lblがbtn_Click()内で認識されないことです...私はそれを理解できません...誰かが提案できますか?

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>

Code-Behind (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 に答える