如何将按钮动态添加到我的表单中?
Posted
技术标签:
【中文标题】如何将按钮动态添加到我的表单中?【英文标题】:How to add buttons dynamically to my form? 【发布时间】:2012-01-26 08:33:14 【问题描述】:当我点击 button1 时,我想在我的表单上创建 10 个按钮。下面这段代码没有错误,但它也不起作用。
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)
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;
【讨论】:
【参考方案2】:它不起作用,因为列表为空。试试这个:
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】:你可以这样做:
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”添加按钮。我认为,“这”不是指您的想法。例如,将其更改为引用 Panel。
//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]);
【讨论】:
在这种情况下,this
是对他的Form
的引用【参考方案5】:
像这样使用按钮数组。它将创建 3 个动态按钮 bcoz h 变量的值为 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]);
【讨论】:
【参考方案6】:我有同样的疑问,想出了以下贡献:
int height = this.Size.Height;
int width = this.Size.Width;
int widthOffset = 10;
int heightOffset = 10;
int btnWidth = 100; // Button Widht
int btnHeight = 40; // Button Height
for (int i = 0; i < 50; ++i)
if ((widthOffset + btnWidth) >= width)
widthOffset = 10;
heightOffset = heightOffset + btnHeight
var button = new Button();
button.Size = new Size(btnWidth, btnHeight);
button.Name = "" + i + "";
button.Text = "" + i + "";
//button.Click += button_Click; // Button Click Event
button.Location = new Point(widthOffset, heightOffset);
Controls.Add(button);
widthOffset = widthOffset + (btnWidth);
else
var button = new Button();
button.Size = new Size(btnWidth, btnHeight);
button.Name = "" + i + "";
button.Text = "" + i + "";
//button.Click += button_Click; // Button Click Event
button.Location = new Point(widthOffset, heightOffset);
Controls.Add(button);
widthOffset = widthOffset + (btnWidth);
预期行为: 这将动态生成按钮并使用当前窗口大小,当按钮超出窗口的右边距时“换行”。
【讨论】:
larguraBotao 和 alturaBotao 是什么意思【参考方案7】:首先,您实际上并没有创建 10 个按钮。其次,您需要设置每个按钮的位置,否则它们将出现在彼此之上。这样就可以了:
for (int i = 0; i < 10; ++i)
var button = new Button();
button.Location = new Point(button.Width * i + 4, 0);
Controls.Add(button);
【讨论】:
【参考方案8】:如果不创建该 Button 的新实例,则无法将 Button 添加到空列表中。 你错过了
Button newButton = new Button();
在你的代码中加上去掉.Capacity
【讨论】:
以上是关于如何将按钮动态添加到我的表单中?的主要内容,如果未能解决你的问题,请参考以下文章