主窗口中两个按钮
A:弹出A窗口
B:弹出B窗口A为操作窗口
B为状态窗口A中的操作状态可以在B中实行显示出来。public delegate void TipDelegate(string msg);A中增加事件:public event TipDelegate TipEvent;同时增加响应:
OnTipEvent(string msg)
{
   if(TipEvent!=null)
   {
       TipEvent(msg);
   }
}B中调用:
B.TipEvent+=new TipDelegate(实现方法);
实现方法()
{
}
--------------------
通过测试,程序可实现现在,如果AB窗口关闭后,再次进行操作都不能实现原功能。当A关闭后再开,进行操作,B中无显示
当B关闭后再开,进行操作,则报错。此问题如何解决?最好是当B窗口关闭时,在A中有任何窗口,B会自动打开,并显示信息。

解决方案 »

  1.   

    B做成singlton模式,当A点击时先调用B的实例化过程,实例化后初始化委托。
      

  2.   

            public static FrmB Instance
            {
                get
                {
                    if (null == instance)
                    {
                        FrmB.instance = new FrmB();
                    }                return FrmB.instance;
                }
            }
    在B的FORMClosing事件内:instance=null;A的button调用
    FrmB B=B.instance;
    B.TipEvent+=new TipDelegate(实现方法); 
      

  3.   

     private static FrmB instance = new FrmB();
      

  4.   

    使用控制器/视图方法吧!
    A类定义刷新接口,在需要刷新数据时调用该接口.
    B类实现其接口.
    外层Form在初始化A时,创建B的实例并传递给A.这样能降低A和B的耦合性,以后想换别的显示窗口也方便!
      

  5.   

    主窗口中两个按钮 
    A:弹出A窗口 
    B:弹出B窗口 在Form中保存A和B的成员对象
    在点击按钮时,先判断该成员变量是否为空,为空则创建,否则显示;
      

  6.   

    个人觉得Singleton不是此问题的解决方法!
      

  7.   

    我实现了消息的通信,
    A,B窗口关闭后也可以实现相应的功能
    还有一个当B窗口关闭,A中有操作时间,B也可以显示出来没有实现我的实现代码是:主窗口中有事件MEvent;---->OnMEvent()主窗口在Load时,将A,B窗口显示出来B.BEvent+=new .....(M_BEvent);OnMEvent()
    {
    if(MEvent!=null)
    MEvent();
    }M_BEvent()
    {
    OnMEvent();
    }B窗口中有事件BEvent;---->OnBEVent()
    Work()
    {
    OnBEVent();
    }
    OnBEVent()
    {
    if(BEvent!=null)
    {
    BEvent();
    }
    }
    ------------------------------------------
    A窗口主窗口事件:M.MEvent+=new ...(A_MEvent);A_MEvent()
    {
    ////状态显示
    }
    A窗口关闭时:M.MEvent-=new ...(A_MEvent);