Je veux créer 10 boutons sur mon formulaire lorsque je clique sur le bouton 1. Aucune erreur avec ce code ci-dessous, mais cela ne fonctionne pas non plus.
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]);
}
}
Cela ne fonctionne pas car la liste est vide. Essaye ça:
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);
}
}
Vous ne créez pas de boutons, vous avez juste une liste vide.
Vous pouvez oublier la liste et créer les boutons dans la boucle.
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;
}
}
Vous pouvez faire quelque chose comme ça:
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 vous souhaitez qu'ils agencent d'une manière raisonnable, il est préférable de les ajouter à l'un des panneaux d'agencement (par exemple, FlowLayoutPanel ) ou de les aligner vous-même.
Je suis venu avec le même doute, avec la contribution actuelle sur la question que je pouvais proposer:
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);
}
}
Le comportement attendu est que, cela générera des boutons en utilisant l'état actuel de la taille de votre fenêtre. Toujours couper une ligne lorsque le bouton suivant dépasse la marge de droite de votre fenêtre.
Deux problèmes - la liste est vide. Vous devez d'abord ajouter des boutons à la liste. Deuxième problème: vous ne pouvez pas ajouter de boutons à "this". "Ceci" ne fait pas référence à ce que vous pensez, je pense. Modifiez cela pour faire référence à un panneau, par exemple.
//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]);
}
}
utiliser un tableau de boutons comme this.it créera 3 boutons dynamiques
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]);
} }
Vous ne pouvez pas ajouter un bouton à une liste vide sans créer une nouvelle instance de ce bouton. Il vous manque le
Button newButton = new Button();
dans votre code plus débarrassez vous du .Capacity
Premièrement, vous ne créez pas réellement 10 boutons. Deuxièmement, vous devez définir l'emplacement de chaque bouton, sinon ils apparaîtront l'un sur l'autre. Ça fera l'affaire:
for (int i = 0; i < 10; ++i)
{
var button = new Button();
button.Location = new Point(button.Width * i + 4, 0);
Controls.Add(button);
}