在网上查到一种方法:
public void creatbtn(int number)
{ Button[] name = new Button[number]; //控件可以随意设置,比如:CheckBox,TextBox等
for (int i = 0; i < number; i++)
{
name[i] = new Button();
name[i].Location = new Point(20, 100 + i * 30); //位置自己调整
name[i].Size = new Size(200, 30); //大小同样
this.Controls.Add(name[i]); //窗体上有一个panel1
string btnname=name[i].ToString();
name[i].Text = btnname; //这句我自己加的,为了看看name[i]写的什么
}
}最后生成的button,其text都是:"Systerm.Windows.Forms.Button,"(注意尾部逗号也在文本中)
但是这样生成的button,如何定义其click事件?如果要更改其name属性怎么改?注意是批量的,也就是说事先并不知道number的值。
public void creatbtn(int number)
{ Button[] name = new Button[number]; //控件可以随意设置,比如:CheckBox,TextBox等
for (int i = 0; i < number; i++)
{
name[i] = new Button();
name[i].Location = new Point(20, 100 + i * 30); //位置自己调整
name[i].Size = new Size(200, 30); //大小同样
this.Controls.Add(name[i]); //窗体上有一个panel1
string btnname=name[i].ToString();
name[i].Text = btnname; //这句我自己加的,为了看看name[i]写的什么
}
}最后生成的button,其text都是:"Systerm.Windows.Forms.Button,"(注意尾部逗号也在文本中)
但是这样生成的button,如何定义其click事件?如果要更改其name属性怎么改?注意是批量的,也就是说事先并不知道number的值。
name[i].Click += new System.EventHandler(this.button1_Click); private void button1_Click(object sender, EventArgs e)
{ }
public void creatbtn(int number)
{
string[] tmpnum = new string[number];//声明string类的对象矩阵
Button[] name = new Button[number];//声明button类的对象矩阵
Form3[] fo = new Form3[number];//声明form类的对象矩阵
try
{
for (int i = 0; i < number; i++)//批量声明和定义
{ tmpnum[i] = "button" + i.ToString();
name[i] = new Button();
name[i].Location = new Point(20, 100 + i * 30);//位置自己调整
name[i].Size = new Size(300, 30);//大小同样 this.Controls.Add(name[i]);//窗体上有一个panel1
name[i].Name = tmpnum[i];//给按钮重命名 fo[i] = new Form3(); name[i].Click += (object sender, EventArgs e) =>
{
fo[i].Show();
};
}
}
catch (Exception e1)
{
System.Windows.Forms.MessageBox.Show("The process failed: {0}", e1.ToString());
}
}结果说:“索引超出了数组界限。”百思不解,如何是好?
如果提供给 DataView..::.Sort 属性的数据列名称无效,则可能引发此异常。有关更多信息,请参见 DataView 属性。是不是跟这个数据列名有关系?
不是扫雷,是一个篮球赛技术统计的小软件,需要根据球员数量批量声明button和定义click事件,但是每个button对应的click事件是显示不同的Form2的实例。结果说:“索引超出了数组界限。”如何改呢?
{
fo[i].Show();
};
这样写感觉有问题
就是这一句报错:
fo[i].Show();说是“索引超出了数组界限。”怎么回事呢?
是什么样的需求?能否在用其他简洁的方式替代?
public void creatbtn(int number)
{ Button[] name = new Button[number]; //控件可以随意设置,比如:CheckBox,TextBox等
for (int i = 0; i < number; i++)
{
name[i] = new Button();
name[i].Location = new Point(20, 100 + i * 30); //位置自己调整
name[i].Size = new Size(200, 30); //大小同样
this.Controls.Add(name[i]); //窗体上有一个panel1
string btnname=name[i].ToString();
name[i].Text = btnname; //这句我自己加的,为了看看name[i]写的什么 name[i].Tag=btnname; //这里做上标记,为事件处理时所用
name[i].Click += new System.EventHandler(CommonButton_Click);
}
}private void CommonButton_Click(object sender, EventArgs e)
{
string btn=sender.Tag.ToString(); //这里取出创建时做的标记,对下面可以做不同处理
。。
}
{
for (int i = 0; i < 7; i++)
{
for (int j = 0; j < 7; j++)
{
Button btn = new Button();
btn.Location = new System.Drawing.Point(20+(i*40), 20+(j*40));
btn.Size = new System.Drawing.Size(40, 40);
btn.Text = (j+1)+"-"+(i+1);
btn.Click += new System.EventHandler(this.btn_Click);
this.Controls.Add(btn);
}
}
} private void btn_Click(object sender, EventArgs e)
{
Button btn=(Button)sender;
//往下就可以调用了
}
简单写了一下,有什么不懂的可以继续说。
如果那个“索引超出了数组界限”是在你单击按钮的时候出现的话,你可以断点看看是不是i的问题