繁体   English   中英

关于以编程方式生成的控件的问题:”?

[英]Question about programmatically generated controls:"?

public partial class Default2 : System.Web.UI.Page
{
    Dictionary<int, Button> btnsDic = new Dictionary<int, Button>();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            for (int i = 0; i < 2; i++)
            {
                Button newBtn = new Button();
                newBtn.CommandName = i.ToString();
                newBtn.Text = i.ToString();
                newBtn.Command += Clicked;
                btnsDic.Add(i, newBtn);
                PlaceHolder p = new PlaceHolder();
                PlaceHolder1.Controls.Add(newBtn);
                //   p.Controls.Add(newBtn); 

            }
        }
        else
        {
            Button dsa = new Button();
            dsa.Text = "This medsa";
            PlaceHolder1.Controls.Add(dsa);
        }
    }

    void Clicked(object sender, CommandEventArgs  e)
    {
        foreach (var item in btnsDic)
        {
             if (e.CommandName==item.Key.ToString())
            {
                Label lebl = new Label();
                 lebl.Text="Button number: "+e.CommandName+" was pressed";
                 this.Controls.Add(lebl);
            }
        }

    }
}

为什么如果我以编程方式制作占位符,而不是以标签形式使用Web窗体上存在的占位符。回发后页面上什么都没有出现?

您正在循环调用PlaceHolder p = new PlaceHolder()。 这意味着,如果它确实起作用,则仅第二个按钮位于占位符中。 另外,您需要在页面上添加新的占位符。 因此,您需要添加一个已经放置在页面上的控件。

    if (IsPostBack)
    {
        PlaceHolder p = new PlaceHolder();
        PlaceHolder1.Controls.Add(p);
        for (int i = 0; i < 2; i++)
        {
            Button newBtn = new Button();
            newBtn.CommandName = i.ToString();
            newBtn.Text = i.ToString();
            newBtn.Command += Clicked;
            btnsDic.Add(i, newBtn);
            p.Controls.Add(newBtn); 
        }
    }

好的,我认为您可能未正确引用占位符。 您像这样引用它:

            PlaceHolder p = new PlaceHolder();
            PlaceHolder1.Controls.Add(newBtn);

但也许您应该这样尝试:-

            PlaceHolder PlaceHolder1 = new PlaceHolder();
            PlaceHolder1.Controls.Add(newBtn);

在MSDN上查看此链接以获取更多信息http://msdn.microsoft.com/zh-cn/library/kyt0fzt1.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM