小白学码,正在学习委托,遇到难题,百思不解。请高手帮忙看看下面代码存在问题。
两个窗体,Form1、Form2,Form1中有一个Button控件。一个外部类:文件夹modules下Btnclass.cs。
意图:单击Form1窗体Button,触发Btnclass类往Form2批量添加动态button控件,并往控件添加响应事件。
难题:已实现在Form2中生成控件,但动态控件单击不响应。
Form1代码:
namespace weituo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Modules.Btnclass.AddBtn(this,e);
}
}
class QShow
{
public delegate void AddBtnEventHander(object sender, EventArgs e);
public event AddBtnEventHander AddBtned;
}
}
Btnclass代码:
namespace weituo.Modules
{
class Btnclass
{
public static void AddBtn(object sender,EventArgs e)//(Form1 objForm)
{
QShow qshow= new QShow();
Form2 form2 = new Form2();
for (int Btnnum = 0; Btnnum <= 8; Btnnum++)
{
Button pb = new Button();
pb.Name = "B" + Btnnum.ToString();
pb.Text = "Button" + Btnnum.ToString();
System.Drawing.Point p = new Point(12, 13 + Btnnum * 30);//创建一个坐标,用来给新的按钮定位
pb.Location = p;//把按钮的位置与刚创建的坐标绑定在一起
form2.Controls.Add(pb);
qshow.AddBtned += new QShow.AddBtnEventHander(Btn_Click);//将按钮的方法绑定到按钮的单击事件中b.Click是按钮的单击事件
form2.Show();
}
}
private static void Btn_Click(object sender, System.EventArgs e)
{
Button pb = (Button)sender;//将触发此事件的对象转换为该Button对象
//if(pb.Name=="B1")
MessageBox.Show("" + pb.Name);
}
}
}