Подтвердить что ты не робот

Как динамически добавлять кнопки в мою форму?

Я хочу создать 10 кнопок в моей форме, когда я нажимаю кнопку button1. Нет ошибки с этим кодом ниже, но он тоже не работает.

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]);   
    }
}
4b9b3361

Ответ 1

Это не работает, потому что список пуст. Попробуйте следующее:

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

Вы не создаете никаких кнопок, у вас просто пустой список.

Вы можете забыть список и просто создать кнопки в цикле.

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;
     }
} 

Ответ 3

Вы можете сделать что-то вроде этого:

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) или выровнять их самостоятельно.

Ответ 4

Две проблемы. Список пуст. Сначала вам нужно добавить несколько кнопок в список. Вторая проблема: вы не можете добавлять кнопки в "this". "This" не ссылается на то, что вы думаете, я думаю. Измените это, чтобы ссылаться на панель, например.

//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]);   
        }
    }

Ответ 5

Вы не можете добавить кнопку в пустой список, не создавая новый экземпляр этой кнопки. Вам не хватает

Button newButton = new Button();  

в вашем коде плюс избавиться от .Capacity

Ответ 6

Во-первых, вы фактически не создаете 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

используйте такой массив кнопок, как this.it создаст 3 динамические кнопки. bcoz h variable имеет значение 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]);

}  }

Ответ 8

Я пришел с таким же сомнением, с текущим вкладом в проблему, которую я мог придумать:

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

                }

            }

Ожидаемое поведение заключается в том, что это создаст кнопки, используя текущее состояние вашего размера окна. Всегда прерывая строку, когда следующая кнопка будет превышать правый край вашего окна.