我知道如何在运行时创建按钮。
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;
答案 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)
{
}
}