在运行期间在C#.net中创建按钮?

时间:2011-02-09 09:45:16

标签: c# winforms visual-studio

我知道如何在运行时创建按钮。

Button button1 = new Button();

button1.Location = new Point(20,10);
button1.Text = "Click Me";
// adding to groupBox1
groupBox1.Controls.Add(button1);

但问题是我想添加这样的多个按钮..

for(int i = 1; i < 30; i++) {
Button button[i] = new Button();
// Button customization here...
...
groupBox1.Controls.Add(button[i]);

}

上面的代码是假代码。如何在C#.net中实现这一点?我想创建多个按钮,按钮名称,button1,button2,button3,button4,.... button30;

5 个答案:

答案 0 :(得分:4)

你不能在C#执行时声明额外的变量 - 但你真的不想这样做,因为之后你无法动态访问它们。只需创建一个数组:

// buttons would be declared as Button[] as a member variable
buttons = new Button[30]; 
for(int i = 0; i < buttons.Length; i++) {
    buttons[i] = new Button();
    // Button customization here...
    ...
    groupBox1.Controls.Add(buttons[i]);
}

或者,使用List<Button>,如果您事先不知道需要多少按钮,这肯定会更方便。 (请参阅必修"arrays considered somewhat harmful"博文。)

当然,如果您实际上不需要稍后使用按钮,请不要将它们分配给循环外可见的任何内容:

for(int i = 0; i < 30; i++) {
    Button button = new Button();
    // Button customization here...
    ...
    groupBox1.Controls.Add(button);
}

您需要考虑什么时候需要访问的信息......以及您希望如何访问它。如果您在逻辑上拥有集合按钮,则应使用集合类型变量(如列表或数组)。

坦率地说,我认为这是VS设计师的诅咒之一,你最终会得到一些可怕的名字,比如“groupBox1”,这些名字不包含已经在类型声明中的信息,并鼓励开发人员单独考虑控件集合 - 命名变量。那只是我脾气暴躁:))

答案 1 :(得分:1)

试试这个

for(int i = 1; i < 30; i++) {
Button button = new Button();
// Button customization here...
button.Name = "Button" + i.ToString();
groupBox1.Controls.Add(button);
}

答案 2 :(得分:1)

你似乎几乎走在正确的轨道上:

// in form class
Button[] m_newButtons = new Button[30];

// in your trigger function
for(int i = 0; i < 30; ++i)
{
    m_newButtons[i] = new Button();
    // ...
    groupBox1.Controls.Add(m_newButtons[i]);
}

如果您尝试多次执行此操作,则可能需要在添加新按钮之前从控件中删除旧按钮。

答案 3 :(得分:0)

buttons = new Button[30]; 
for(int i = 0; i < buttons.Length; i++) {
    buttons[i] = new Button();

    groupBox1.Controls.Add(buttons[i]);
}

此代码可以使用,但按钮将被添加到其他设置位置

buttons = new Button[30]; 
    for(int i = 0; i < buttons.Length; i++) 
    {
        buttons[i] = new Button();
        Point p=new Point(xvalue,yvalue);
       buttons[i].Location = p;       
        groupBox1.Controls.Add(buttons[i]);
    }

您要记住的一件事是增加您想要显示它的x或y位置

答案 4 :(得分:0)

试试这个,我自己刚刚学会了:

public partial class Form1 : Form
{
 Button[] btn = new Button[12];// <--------<<<Button Array

 public Form1()
 {
  InitializeComponent();
 }   

 private void Form1_Load (object sender, EventArgs e)
 {    
    for (int i = 0; i < 12; i++)
    { 
     btn[i] = new Button ( ); 
     this.flowLayoutPanel1.Controls.Add(btn[i]);
    }
 }
 // double click on the flow layoutPannel initiates this code
 private void flowLayoutPanel1_Paint(object sender, PaintEventArgs e)
 {

 }

}