本帖最后由 beiqibing 于 2012-08-20 14:50:35 编辑

解决方案 »

  1.   

    你都用委托了,就不需要实例化的具体对象,+=操作后期完成。窗体A的打开窗体C时使用了委托,为啥不能同时初始化B的委托呢?
      

  2.   

    Form f = new Form();  
    f.aa += new bb(cc);  
    f.Show();   
    这个不算实例化Form吗?我理解的初始化委托一定要在将要被被操作的窗体中,因为“操作”的都是这个窗体中的资源,所以B得委托应在B中初始化,这样+=操作后期完成,”操作后期完成“才方便?不知道理解的哪边有问题,请指正
      

  3.   

    委托传递的是方法名,或者说是方法的地址,也就是你这里面的cc,在A初始化C的时候,这个cc就应该是A中的某个方法,让C在某个时间执行这个委托的时候调用它。而你的C是由A初始化的,并非通过B,那么B不可能知道A什么时候会去初始化一个C出来,自然针对B的委托,就应该由A来负责提供,只要传递B中的方法即可,而B中需要传递的方法必须声明为public,且A要能够获取B的实例。
      

  4.   

    “且A要能够获取B的实例”,如果B是A的父窗体呢,A获取B的实例,不是相当于又实例化了一个主窗体,这样相应的委托就在新窗体实例中执行委托操作了,旧的主窗体没有变化。
      

  5.   

    B窗体的委托我是这样写的,在A窗体中写:
    窗体B b = new 窗体B();
    formaddequ.formmainMyEqu += new FormMainEquDelegate(b.form_main_MyEqu);
    form_main_MyEqu是在主窗体窗体B中的public方法
      

  6.   

    B既然是A的父窗体,那么通过A的Owner属性就可以访问了。你新建的B窗体和你已经存在的B窗体完全是不同的两个窗体,怎么可以那么写?