private void button1_Click(object sender, EventArgs e)
        {
            
            Button newbtn = new Button(); 
            this.Controls.Add(newbtn);
            newbtn.Click += new EventHandler(newbtn_click);        }
         
        public void newbtn_click(object sender, EventArgs e)
        {
            Form2 frm2 = new Form2();
            frm2.ShowDialog();
        }这样可以实现动态生成按钮并且实现生成的按钮的newbtn_click方法
但是现在我能得到的只是一个字符串 "newbtn_click"要怎么样才能通过这个字符串来调用newbtn_click这个方法啊,求大神啊  在线等!

解决方案 »

  1.   

    最终的目的是根据传来的字符串newbtn_click来显示Form2窗体,那么你可以将如下代码重构一下public void ShowForm()
                {
                    Form2 frm2 = new Form2(); 
                    frm2.ShowDialog(); 
                }然后无论是点击,还是传来字符串,都调用这个方法即可,而你需要做的就是判断一下.
      

  2.   

    看了半天,终于明白lz的问题了
    this.GetType().GetMethod("newbtn_click").Invoke(this, null); 
      

  3.   


    我的目的是根据传入的字符串不同来选择不同的方法打开不同的窗口
    而且这个public void newbtn_click(object sender, EventArgs e)是点击事件 不能改滴
      

  4.   


    if(getStr=="newbtn_click")
    {
    newbtn_click(null,null);
    }
      

  5.   

    你在哪得到字符串 "newbtn_click"的,就在哪调用啊。最好能说下,你想要显示什么效果。你的代码只能看到你在点击button1时,生成了一个新的按钮,并给按钮赋了事件。
      

  6.   

    我是想要动态生成一些按钮 这些按钮的名字不同 根据他们的名字来判断调用哪个方法 假设动态生成按钮 1,2,3   点击时分别能打开A,B,C三个窗口  就是这意思  但是不想用if  看看其他的能实现么?
      

  7.   

    switch(参数)
    case"1":
    me.show(a窗口);
    break;
      

  8.   

    你需要在什么地方使用这个事件就用这句话,
    this.GetType().GetMethod("newbtn_click").Invoke(this,new object[]{this,null});
      

  9.   

    this.GetType().GetMethod("newbtn_click").Invoke(this, null); 
      

  10.   

    我需要在newbtn.Click += new EventHandler(newbtn_click);这里用
    但是newbtn.Click += new EventHandler(this.GetType().GetMethod("newbtn_click").Invoke(this,new object[]{this,null}));
    报错啊  错误:应输入方法名称
      

  11.   

    EventInfo vEventInfo = typeof(Button).GetEvent("Click");
    vEventInfo.AddEventHandler(newbtn,Delegate.CreateDelegate(vEventInfo.EventHandlerType, this, "newbtn_click"));
    相当于newbtn.Click += new EventHandler(newbtn_click);