大家好,好久没来了,以前一直做web程序的开发,现在开始做win程序的开发,还真有点不适应。问大家一个菜鸟的问题,从一个画面迁移到另一个画面(通过show()方法),当我在点击按钮的时候,如果已经打开了这个画面,怎么判断它已经被打开了,不再打开一个相同的画面。说得有点绕嘴,大家别见笑。

解决方案 »

  1.   

    这个情况有很多种,比如新画面窗口是旧窗口的一个字段,还是在点击按钮时生成的一个局部变量?不同情况处理方式就不一样了,不太好说。那么你说具体一点吧,你的实际问题是什么?
    (如果是如下情况:这个新窗口你要经常使用,但常常被用户关闭掉,当用户点击某一按钮时会Show(而不是ShowDialog)该新窗口,但用户在未关闭新窗口时又去点击按钮就会重复地出现多个新窗口,那么:1,将该新窗口作为字段使用而不是局部变量 2,override新窗口的Dispose(bool)方法,将其改为Hide)
      

  2.   

    像你这种情况就属于在按钮事件里new的窗体对象,也就是每点一下按钮就新生成了一个窗体,如果你不想用Dialog的方式的话,那你就在按钮事件外面new,在事件内show()
      

  3.   

    設置全局靜態的bool變量
    打開的時候先判斷一下
      

  4.   

    在事件外面实例化一个窗体类,感觉好像有点不好,会不会对程序造成一些负面的影响。刚才我也想到了,在外面定义一个静态的变量,在每次show的时候判断以下,这时候又出现一个新问题,如果被show出的画面已经存在,如何让他显示在前台(这时候它出于最小化状态),并且还要把我操作的画面的一些数据传过去
      

  5.   

    传过去的数据是用来更新被show出的画面用的
      

  6.   

    用 ShowDialog这样只能出一个窗口
      

  7.   

    是呀,但我用的不是shoeDilog方法,如果是的话就不会有这些问题了,现在倒是能够判断出只谈出一个画面,但是怎么才能让它显示到最前面来呢,一点头绪都没有,郁闷中。
      

  8.   

    用hashtable存起来form =HT["Form1"];
    if (form is null||form.disposed())
    {
    form=new Form1();
    HT["Form1"]=form;
    }
    form.show();
      

  9.   

    好的,搞定了,如果已经弹出了这个画面,在else分支中通过调用Foem的Activate方法,可以让它显示到前面来。
      

  10.   

    还是不明白怎么显示到前面   你没有form的实例  怎么用Activate方法?