wangf1978 2017-04-11 09:01 采纳率: 0%
浏览 2056
已结题

c#下利用委托为动态控件添加响应事件

小白学码,正在学习委托,遇到难题,百思不解。请高手帮忙看看下面代码存在问题。
两个窗体,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);
    }



}

}

  • 写回答

1条回答 默认 最新

  • yangbo50304 2017-04-12 01:40
    关注

    加一行

     pb.Click += Btn_Click;
    
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器