Как динамически добавлять кнопки в мою форму?
Я хочу создать 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]);
}
}
Ответы
Ответ 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);
}
}
Ожидаемое поведение заключается в том, что это создаст кнопки, используя текущее состояние вашего размера окна. Всегда прерывая строку, когда следующая кнопка будет превышать правый край вашего окна.