it-swarm.com.de

Wie füge ich meinem Formular dynamisch Schaltflächen hinzu?

Ich möchte 10 Schaltflächen in meinem Formular erstellen, wenn ich auf Schaltfläche 1 klicke. Kein Fehler mit dem folgenden Code, aber er funktioniert auch nicht.

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

Es funktioniert nicht, weil die Liste leer ist. Versuche dies:

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

Sie erstellen keine Schaltflächen, Sie haben nur eine leere Liste.

Sie können die Liste vergessen und einfach die Schaltflächen in der Schleife erstellen.

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;
     }
} 
20
Igby Largeman

Sie könnten so etwas tun:

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

Wenn Sie möchten, dass sie auf eine vernünftige Art und Weise angeordnet werden, sollten Sie sie besser zu einem der Layoutfenster hinzufügen (d. H. FlowLayoutPanel ) oder sie selbst ausrichten.

4
pstrjds

Ich kam mit dem gleichen Zweifel, mit dem aktuellen Beitrag zu der Frage, die ich hatte:

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

                }

            }

Das erwartete Verhalten ist, dass dadurch Schaltflächen unter Verwendung des aktuellen Status Ihrer Fenstergröße generiert werden. Unterbrechen Sie immer eine Linie, wenn die nächste Schaltfläche den rechten Rand Ihres Fensters überschreitet.

1
Vvisions

Zwei Probleme - Liste ist leer. Sie müssen zuerst einige Schaltflächen zur Liste hinzufügen. Zweites Problem: Sie können keine Schaltflächen zu "this" hinzufügen. "Dies" bezieht sich nicht auf das, was Sie denken, denke ich. Ändern Sie dies, um beispielsweise auf ein Panel zu verweisen.

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

verwenden Sie ein Button-Array wie dieses. Es werden 3 dynamische Buttons erstellt. Die Variable bcoz h hat den Wert 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
rithish

Sie können eine Schaltfläche nicht zu einer leeren Liste hinzufügen, ohne eine neue Instanz dieser Schaltfläche zu erstellen. Sie vermissen das 

Button newButton = new Button();  

in Ihrem Code und entfernen Sie den .Capacity

0
MethodMan

Erstens erstellen Sie nicht wirklich 10 Knöpfe. Zweitens müssen Sie die Position der einzelnen Schaltflächen festlegen, sonst werden sie übereinander angezeigt. Dies wird den Trick tun:

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