111,119
社区成员
发帖
与我相关
我的任务
分享
namespace 动态按钮
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var p = new Point(4, 4);
var d = 24;
for (int i = 1; i <= 10; i++)
{
Button b = new Button();
b.Name = "btn_" + i.ToString();
b.Text = "按钮"+i.ToString();
b.Location = p;
p.Y += d;
// b.Click += delegate(object sender, EventArgs e) { MessageBox.Show(((Button)sender).Text); };
b.Click += new EventHandler(my_Click);
this.Controls.Add(b);
}
}
static void my_Click(object sender, EventArgs e)
{
MessageBox.Show(((Button)sender).Name);
}
}
}
我知道是响应名,但我只知道控件的名字是“b”+step.Tostring()+bn.Tostring()
用这个函数创建的button的名称每次都不一样,那我应该用 什么_Click[/quote]flowLayoutPanel1.Controls["btn_6"]
这样也可以。 不用循环。

public Form1()
{
InitializeComponent();
for (int i = 1; i <= 10; i++)
{
Button b = new Button();
b.Name = "btn_" + i.ToString();
b.Text = "按钮" + i.ToString();
//b.Click += delegate(object sender, EventArgs e)
//{
// MessageBox.Show(((Button)sender).Text);
//};
flowLayoutPanel1.Controls.Add(b);
}
}
private void button1_Click(object sender, EventArgs e)
{
foreach (Control i in flowLayoutPanel1.Controls)
{
if (i.Name == "btn_7")
{
i.Click += delegate(object sender2, EventArgs e2)
{
MessageBox.Show(((Button)sender2).Text);
};
}
if (i.Name == "btn_6")
{
i.Click += i_Click;
}
}
}
void i_Click(object sender, EventArgs e)
{
MessageBox.Show("这个是按钮6");
}
不想用text 还可以用b.Tag存 对象
for (int i = 1; i <= 10; i++)
{
Button b = new Button();
b.Name = "btn_" + i.ToString();
b.Text = "按钮"+i.ToString();
b.Click += delegate(object sender, EventArgs e)
{
MessageBox.Show(((Button)sender).Text);
};
flowLayoutPanel1.Controls.Add(b);
}
void mHandler(object sender,EventArgs e)
{
//按钮事件
}