因为按下button后首先进行的是初始化
panel里的控件被清空了
所以每次只有最后一次click加的那个button了

解决方案 »

  1.   

    感谢您使用微软产品。由于您的button是动态建立的,所以在第二次调用aspx时原先的button并不会保留。如果您要模拟保留原先的button,您可以在Page_Load事件中通过某种方式从新建立原先的button。例如:
    private void Page_Load(object sender, System.EventArgs e)
    {
    if (null == Session["btncnt"])
    {
    Session["btncnt"] = 0;
    }
    else
    {
    int cnt;
    cnt = (int)Session["btncnt"];
    Button button1;
    for (int i=1;i<=cnt;i++)
    {
    button1=new Button();
    button1.Text="Button";
    Panel1.Controls.Add(button1);
    }
    }
    } private void button_Click(object sender, System.EventArgs e)
    {
    Button button1=new Button();
    button1.Text="Button";
    Panel1.Controls.Add(button1);
    Session["btncnt"] = (int)Session["btncnt"] + 1;
    }当然,您还可以用您自己更复杂的方法来跟踪已建立的button。 - 微软全球技术中心 VB技术支持本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。为了为您创建更好的讨论环境,请参加我们的用户满意度调查(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。
      

  2.   

    原因如上
    你也可以这样实现:
    在Global.asax.cs中加入
    protected void Session_Start(Object sender, EventArgs e)
    {
    Session.Add("ButtonNum",0);
    }
    protected void Session_End(Object sender, EventArgs e)
    {
    Session.Remove("ButtonNum");
    }在Page_Load中加入
    private void Page_Load(object sender, System.EventArgs e)
    {
    if(Page.IsPostBack)
    {
    int n=(int)Session["ButtonNum"];
    n++;
    Session["ButtonNum"]=n;
    }
    }而后
    private void Button1_Click(object sender, System.EventArgs e)
    {
    int n=(int)Session["ButtonNum"];
    for(int i=0;i<n;i++)
    {
    Button bt=new Button();
    bt.Text="Button";
    Panel1.Controls.Add(bt);
    }
    }
      

  3.   

    谢谢几位的回复,这种方法我也用了,不过不是用Session,我设了一个静态变量来记数。
    它就没有提供一种可以保存的方法吗?如果每次添加进去的控件很多,那不是很浪费资源吗?有没有更好的方法??
      

  4.   

    可以不用session,用viewstate来保存状态就可以了,资源占用很少的,代码如下:
    <script runat=server>
    Sub page_load(obj As object,e As eventargs)
    If Not ispostback then
    viewstate("buttonnum")=0
    End If  
    End Sub Sub button_click(obj As object,e As eventargs)
    Dim num,i
    viewstate("buttonnum") = viewstate("buttonnum") + 1
    num=viewstate("buttonnum")
    For  i=1 to num
        Dim bt As new Button()
        bt.Text="Button"
        holder.Controls.Add(bt)
    Next 
    End Sub 
    </script>
    <html>
    <body>
    <Form runat=server>
    <asp:Panel id="panel1" runat=server>
    <asp:placeholder id="holder" runat=server/>
    </asp:panel>
    <hr>
    <asp:Button id="button1" text="click" onclick="button_click" runat=server/>
    </form>
    </body>
    </html>