我要完成的一个项目需要大体5到6个窗体,要做到的要求就是每次只显示其中一个窗体,而且窗体之间可以任意相互之间切换,并且每次窗体显示的时候都是需要执行一些初始化其界面文本、图片等操作的。
    目前,本人用的方法是每次都用new实例化窗体,然后用showDialog方式来显示,操作结束时Dispose窗体,然后通过判断DialogEesult(也可以用窗体的局部变量)来决定窗体返回后要跳回到哪里窗体,而在每个窗体的Load事件中执行初始化操作。但是这样有一个不好的地方是:当FormA实例化FomrB并showDialog显示FormB,而FomrB在继续实例化FomrC并showDialog显示FormC;当用户想直接从FormC返回FormA时候需要经历FormB这个窗体,加入如此多层嵌套实在是不方便。
    现在我想用第二种方法:在Program.cs主函数中全部静态实例化所有窗体,当需要进入哪个窗体是就Hide当前窗体再Show要显示的窗体,要退出程序就Application.Exit()。但是有一个解决不了的问题:初始化操作应该放在窗体哪个操作中?Load事件只会在第一次显示时调用,而Paint事件则太频繁调用了!
    请大侠们给个建议或者有其他更好的设计方法?!?!?!?还是需要做个线程来专门监视窗体切换?我不想这样去开销内存,因为项目涉及图像处理对速度要求高。

解决方案 »

  1.   

    我的问题主要是在于如果我用第二种方法,窗体有没有响应Form.Show()的事件,可以让我在里面对窗体进行初始化
      

  2.   


    我直接静态实例化了所有窗体了。其实我自己傻了,绕了一个大弯……我在每个窗体里面加一个初始化Public函数,只要在调用show的时候再调用一下这个初始化Public函数就可以了!谢谢啦
      

  3.   

    在 main 里面使用一个静态 字典 存储 那 5 个窗口的实例化,
    暴露一个静态方法供调用,写段伪代码看看效果字段<枚举,窗口> DicFrm;
    public static From S_Frm;public static ShowWindow(枚举 e)
    {
      if(S_Frm!=null)
      { S_Frm.Close()}  if(e.AFrm)
      { S_Frm = DicFrm[e]}
      else if(e.BFrm)
      {......}  S_Frm.Show();
       
    }