如何动态地向我的表单添加按钮?

时间:2011-12-22 18:33:39

标签: c# winforms button dynamic

我想在单击按钮1时在表单上创建10个按钮。下面的代码没有错误,但它也不起作用。

private void button1_Click(object sender, EventArgs e)
{
    List<Button> buttons = new List<Button>();
    for (int i = 0; i < buttons.Capacity; i++)
    {
        this.Controls.Add(buttons[i]);   
    }
}

8 个答案:

答案 0 :(得分:20)

您没有创建任何按钮,只有一个空列表。

您可以忘记列表,只需在循环中创建按钮。

private void button1_Click(object sender, EventArgs e) 
{     
     int top = 50;
     int left = 100;

     for (int i = 0; i < 10; i++)     
     {         
          Button button = new Button();   
          button.Left = left;
          button.Top = top;
          this.Controls.Add(button);      
          top += button.Height + 2;
     }
} 

答案 1 :(得分:19)

它不起作用,因为列表为空。试试这个:

private void button1_Click(object sender, EventArgs e)
{
    List<Button> buttons = new List<Button>();
    for (int i = 0; i < 10; i++)
    {
        Button newButton = new Button();
        buttons.Add(newButton);
        this.Controls.Add(newButton);   
    }
}

答案 2 :(得分:4)

你可以这样做:

Point newLoc = new Point(5,5); // Set whatever you want for initial location
for(int i=0; i < 10; ++i)
{
    Button b = new Button();
    b.Size = new Size(10, 50);
    b.Location = newLoc;
    newLoc.Offset(0, b.Height + 5);
    Controls.Add(b);
}

如果您希望它们以任何合理的方式进行布局,最好将它们添加到其中一个布局面板(即FlowLayoutPanel)或自己对齐它们。

答案 3 :(得分:1)

两个问题 - 列表为空。您需要先在列表中添加一些按钮。第二个问题:您无法向“此”添加按钮。我想,“这个”并没有引用你的想法。例如,将其更改为引用Panel。

//Assume you have on your .aspx page:
<asp:Panel ID="Panel_Controls" runat="server"></asp:Panel>


private void button1_Click(object sender, EventArgs e)
    {
        List<Button> buttons = new List<Button>();


        for (int i = 0; i < buttons.Capacity; i++)
        {
            Panel_Controls.Controls.Add(buttons[i]);   
        }
    }

答案 4 :(得分:1)

我带来了同样的疑问,目前在我能提出的问题上做出了贡献:

 int altura = this.Size.Height;
            int largura = this.Size.Width;

            int alturaOffset = 10;
            int larguraOffset = 10;
            int larguraBotao = 100; //button widht
            int alturaBotao = 40;  //button height

            for (int i = 0; i < 50; ++i)
            {

                if ((larguraOffset+larguraBotao) >= largura)
                {                    
                    larguraOffset = 10;
                    alturaOffset = alturaOffset + alturaBotao;
                    var button = new Button();
                    button.Size = new Size(larguraBotao, alturaBotao);
                    button.Name = "" + i + "";
                    button.Text = "" + i + "";
                    //button.Click += button_Click;//function
                    button.Location = new Point(larguraOffset, alturaOffset);
                    Controls.Add(button);
                    larguraOffset = larguraOffset + (larguraBotao);
                }
                else
                {

                    var button = new Button();
                    button.Size = new Size(larguraBotao, alturaBotao);
                    button.Name = "" + i + "";
                    button.Text = "" + i + "";
                    //button.Click += button_Click;//function
                    button.Location = new Point(larguraOffset, alturaOffset);
                    Controls.Add(button);
                    larguraOffset = larguraOffset+(larguraBotao);

                }

            }

预期的行为是,这将使用窗口大小的当前状态生成按钮,当下一个按钮超出窗口的右边距时,始终断开一行。

答案 5 :(得分:0)

如果没有创建该Button的新实例,则无法将Button添加到空列表中。 你错过了

Button newButton = new Button();  

在您的代码中加上摆脱.Capacity

答案 6 :(得分:0)

首先,您实际上并没有创建10个按钮。其次,您需要设置每个按钮的位置,否则它们将显示在彼此的顶部。这样就可以了:

  for (int i = 0; i < 10; ++i)
  {
      var button = new Button();
      button.Location = new Point(button.Width * i + 4, 0);
      Controls.Add(button);
  }

答案 7 :(得分:0)

使用像这样的按钮数组。它将创建3个动态按钮bcoz h变量的值为3

private void button1_Click(object sender, EventArgs e)
{
int h =3;


Button[] buttonArray = new Button[8];

for (int i = 0; i <= h-1; i++)
{
   buttonArray[i] = new Button();
   buttonArray[i].Size = new Size(20, 43);
   buttonArray[i].Name= ""+i+"";
   buttonArray[i].Click += button_Click;//function
   buttonArray[i].Location = new Point(40, 20 + (i * 20));
    panel1.Controls.Add(buttonArray[i]);

}  }