2011-12-22 13 views
13

Voglio creare 10 pulsanti sul mio modulo quando clicco su button1. Nessun errore con questo codice qui sotto, ma non funziona neanche.Come aggiungere pulsanti dinamicamente al mio modulo?

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

Devi assegnare un'altezza e una larghezza, o non saranno visibili –

+0

e ancora una volta hai una risposta valida, ma non l'hai accettata o hai spiegato perché non è adatta ... – Adam

risposta

17

Non funziona perché l'elenco è vuoto. Prova questo:

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

Si potrebbe fare qualcosa di simile:

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

Se si desidera loro di layout in qualsiasi tipo di moda ragionevole sarebbe meglio per aggiungerli a uno dei pannelli di layout (cioè FlowLayoutPanel) o per allinearli da soli.

0

Non è possibile aggiungere un pulsante a una lista vuota senza creare una nuova istanza di quel pulsante. Ti manca il

Button newButton = new Button(); 

nel codice oltre a sbarazzarsi del .Capacity

17

Non sta creando alcun tasto, basta una lista vuota.

È possibile dimenticare l'elenco e creare semplicemente i pulsanti nel ciclo.

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 per una soluzione robusta – Adam

0

Innanzitutto, in realtà non stai creando 10 pulsanti. In secondo luogo, è necessario impostare la posizione di ciascun pulsante, altrimenti verranno visualizzati uno sopra l'altro. Questo farà il trucco:

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

Due problemi- L'elenco è vuoto. È necessario aggiungere prima alcuni pulsanti all'elenco. Secondo problema: non è possibile aggiungere pulsanti a "questo". "Questo" non si riferisce a ciò che pensi, penso. Cambia questo per fare riferimento a un pannello, per esempio.

//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

In questo caso, 'this' è un riferimento al suo' Form' – Adam

0

uso matrice pulsante come this.it creerà 3 pulsanti dinamici Bcoz variabile h ha un valore di 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

sono venuto con lo stesso dubbio, con il contributo di corrente sulla questione ho potuto venuto 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); 

       } 

      } 

il comportamento previsto è che, questo genererà tasti utilizzando lo stato attuale della vostra dimensione della finestra, rompendo sempre una linea quando il pulsante accanto supererebbe il Margi destra n della tua finestra.

+0

whats larguraBotao e alturaBotao significano –

Problemi correlati