2011-12-22 32 views
13

Quiero crear 10 botones en mi formulario cuando hago clic en el botón 1. No hay error con este código a continuación, pero tampoco funciona.¿Cómo agregar botones dinámicamente a mi formulario?

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

Debes asignar un alto y un ancho, o no estarán visibles –

+0

y una vez más recibiste una respuesta válida, pero no la has aceptado ni explicado por qué no es adecuada ... – Adam

Respuesta

17

No funciona porque la lista está vacía. Prueba esto:

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

se podría hacer algo como esto:

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

Si usted quiere que a la presentación en cualquier tipo de forma razonable sería mejor para añadirlos a uno de los paneles de diseño (es decir, FlowLayoutPanel) o para alinearlos usted mismo.

0

No puede agregar un Botón a una lista vacía sin crear una nueva instancia de ese Botón. Te estas perdiendo el

Button newButton = new Button(); 

en su código más deshacerse de la .Capacity

17

No están creando ningún botón, sólo hay una lista vacía.

Puede olvidarse de la lista y simplemente crear los botones en el bucle.

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

+1 para una solución robusta – Adam

0

En primer lugar, no está creando 10 botones. En segundo lugar, debe establecer la ubicación de cada botón o aparecerán uno encima del otro. Esto hará el truco:

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

Dos problemas: la lista está vacía. Primero debe agregar algunos botones a la lista. Segundo problema: no puede agregar botones a "esto". "Esto" no hace referencia a lo que piensas, creo. Cambie esto para hacer referencia a un Panel, por ejemplo.

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

En este caso, 'this' es una referencia a su' Form' – Adam

0

uso grupo de teclas como this.it creará 3 botones dinámicos bcoz h variable tiene el valor de 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]); 

} } 
0

Vine con la misma duda, con la contribución actual sobre el tema que pude vino con:

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

       } 

      } 

el comportamiento esperado es que, esto va a generar botones utilizando el estado actual de su tamaño de la ventana, siempre romper una línea cuando el botón situado junto excedería el derecho Margi n de tu ventana.

+0

¿Qué significa larguraBotao y alturaBotao? –

Cuestiones relacionadas