我想写个委托,有两个form  分别是form1,form2,
现在在form1下面,实例化form2,然后form2.showdialog();显示,
我要在form1里触发一个事件,来关闭form2,我希望在form2里有个方法直接this.close();不能在form1下面这样写
form2 frm=new form2();
frm.close()因为这样写 我使用的时候感觉不好

解决方案 »

  1.   

    form2里面去监听form1的事件
    不过这样做我觉得更不好
      

  2.   

    当你调用form2的showDialog()方法的时候,你的form1窗口已经不能进行任何操作了,必须首先关闭form2才能对form1操作。所以form2自己关闭自己挺好的。要想通过form1关闭form2,除非在form1里加一个定时器,到时间关闭form2,这是完全没有必要的Form类自己的close()方法是最直接,最简单,最有效的方法,你为什么感觉不好你这个想法很容易绕圈的,冥思苦想研究了半天发现自己又回到了原地。
      

  3.   

    public delegate void CloseDel();class form1:form
    {
    private CloseDel closemethod;//自己把这里改为事件吧;
     form2 f2;
     public form1()
    {
     f2=new form2;
     closemethod=f2.closemethod;
    } public form1closeform2()
    {
      if(closemethod!=null)
      {
       closemethod();
    }
    }
    }
    public class form2:form
    {
     public void closemethod()
    {
     close();
    }
    }//基本这样写就可以,没有调试,自己改改吧如果有兴趣
      

  4.   

    showdialog()的话,在form1里面用上多线程加上Invoke()可能行,show()的话就简单多了!