举个例子比如我现在写一个用户登陆和退出登陆,父窗体中的代码如下:
public static bool session=false;
public Main()
        {
           if(session==false){
               
              //在没有登陆时默认显示的"子窗体form1"
              
              form1 fm1=new form1;
              fm1.Mdiparent=this();
              fm1.show();            }elseif(session==true){
              
              form2 fm2=new form2;
              fm2.Mdiparent=this();
              fm2.show();
              //当session为true时登陆成功.这里显示登陆成功后的内容
            }
         }private void button1_Click(object sender, EventArgs e)
        {
           //这里是退出登陆的按钮CLICK事件代码.
           session=false;
           messagebox.show("已经退出了登陆,需要再次显示子窗体form1.")
           //问题就是这,退出登陆后把session的值改写成了false,父窗体中应该继续显示form1,而实际却还是显示的form2,怎么解决?      
      
        }

解决方案 »

  1.   

    public Main() 
    {SetSession();
    }
    private SetSession()
            {
              if(session==false){
                 
                  //在没有登陆时默认显示的"子窗体form1"
                 
                  form1 fm1=new form1();
                  fm1.Mdiparent=this;

                  fm1.show();            }elseif(session==true){
                 
                  form2 fm2=new form2();
                  fm2.Mdiparent=this;

                  fm2.show();
                  //当session为true时登陆成功.这里显示登陆成功后的内容
                }
            }private void button1_Click(object sender, EventArgs e)
            {
              //这里是退出登陆的按钮CLICK事件代码.
              session=false;
              messagebox.show("已经退出了登陆,需要再次显示子窗体form1.")
              SetSession();
         
            } 
      

  2.   

    感觉session的值永远都是false 这样不对
      

  3.   

    呵呵,这上个典型的设计的问题。
    简单点来说你应该这样:public void SessionRefresh()
    {   CloseAllMdiChildWindow();  //先关闭其它窗口   
       if(session==false){
                 
                  //在没有登陆时默认显示的"子窗体form1"
                 
                  form1 fm1=new form1;
                  fm1.Mdiparent=this();
                  fm1.show();            }elseif(session==true){
                 
                  form2 fm2=new form2;
                  fm2.Mdiparent=this();
                  fm2.show();
                  //当session为true时登陆成功.这里显示登陆成功后的内容
        }   
    }private void CloseAllMdiChildWindow()
    {
      //..这里关闭所有的子窗口。你可以根据情况确定是否需要这个函数以及如何关闭
    }
    每当你的用户登录成功或者注销时,你都需要调用一次:
    SessionRefresh();
    即可。这是简单的方法,并不表示一定要这样实现,针对你的项目的情况你需要做出很多改进。
      

  4.   

    public Main()  是构造函数,不会执行第二次的. 所以当你点了button1后同样不会运行public Main() 里面的语句.
      

  5.   


    如果不关闭窗体怎么实现?主要我看是MAIN好像是注入内存中没更新过来.
      

  6.   

    按照一楼说的,写个函数 把MAIN方法里的东西放到你写的函数里,因为你是通过session的值来控制显示某个窗体,
    但是Main方法只执行一次,也就是说  你的程序只是在程序开始运行的时候做一次判断 显示哪个窗体,之后即使你改变了
    Session的值,但是没有对Session改变后进行操作,因为Main只执行一次。 所以写个函数,改变Session之后就调用
    下这个函数。
    这样的话不仅仅两个窗体  多个窗体也可以通过这个方法来判断 显示哪个,关闭哪个
      

  7.   

    button1_Click事件里关闭所有的子窗体.然后再调用你的Main()