在Form1中 : foreach (Form f in this.OwnedForms)  //遍历所有子窗口
            {
                if (f.Text == "form2")  //找到form2
                {
                    f.button40_Click(button40, new EventArgs());  //触发form2的button40_Click事件
                }            
            }Form2中定义有button40_Click事件
为什么最后不能触发呢?

解决方案 »

  1.   

    忘了说,Form2的button40_Click事件和button40都设置成了public
      

  2.   

     button_click(this,   e);   
      

  3.   


    public Form1()
            {
                InitializeComponent();
                button1.Click += new EventHandler(button1_Click);
            }        private void button1_Click(object sender, EventArgs e)
            {
                ...
            }
      

  4.   

    事件使用一个event关键字,就是为了跟委托区别开来。只有拥有事件的对象自己才可以触发事件,其它外部客户程序不能恶意触发事件。而且事件只能使用 +=、-=等有限的方法来注册,不能恶意篡改。而委托则没有安全性,不但谁都可以去从拥有它的对象外部去触发,而且甚至可以销毁和篡改它。如果你的 form2 想开发别人来告诉自己触发事件,那么设计一个method让别人来调用吧。例如修改一下你的代码 foreach (Form f in this.OwnedForms) //遍历所有子窗口
      {
        if (f is form2 && f.Text == "form2") //找到form2
        {
            ((form2)f).FireTheEvent(button40); //触发form2的button40_Click事件
         }   
      }
      

  5.   


    请问大师,FireTheEvent是什么意思,最好是给一个MSDN链接,谢谢
      

  6.   

    最好不要用外部程序直接调用按钮事件,你可以把 button40_Click 里面的方法在包一层,比如上面的FireTheEvent,然后在button40_Click里面调用它,在你找到的form2里面也调用这个方法
      

  7.   

    加上 Page.IsPostBack == true
      

  8.   

     foreach (Form f in this.OwnedForms) //遍历所有子窗口
      {
      if (f.Text == "form2") //找到form2
      {
      ((form2)f).button40_Click(null,null);//触发form2的button40_Click事件
      }   
      }
      

  9.   


    //这2个方法在Form2里边 
    public  void button40_Click(object sender, new EventArgs()
    {
      //调用方法
      this.get_Button();
    }
    public void get_Button()
    {
       //这个方法的里边的具体过程也就是你的button40_Click事件里的实现具体过程。
    }
    //下边的方法在Form1,按照你说的找到Form2之后,可以这样写。
      Form2 f = new Form2();
      f.get_Button();  希望能帮到你哦。
      

  10.   

     f.Invoke(new Delegate(button40,"PerformClick")); //触发form2的button40的Click事件
      

  11.   

    楼上各位的方法都不错,我还想知道上面的FireTheEvent是什么意思,是自定义的一个方法吗?请给一个MSDN链接,谢谢!!!
      

  12.   

    FireTheEvent是自己写的一个方法吗?
      

  13.   

    这个方法,麻烦给一个MSDN链接,谢谢
      

  14.   


    难道不会用百度吗?http://msdn.microsoft.com/zh-cn/library/system.windows.forms.button.performclick(v=VS.90).aspx
      

  15.   

    真不知道,为什么MSDN的Button类里面为什么没有这个方法,而你给这个链接却又是MSDN的,是怎么在MSDN搜到的
      

  16.   


    关键字就是:Button.PerformClick