做了一个小系统,程序启动时为一个登录框体,输入用户名和密码之后在数据库中查找,找到之后关闭登陆界面显示主界面,但是偶尔会发现登录界面和主界面同时显示,不清楚问题出在哪里,请教一下。大概代码如下:
try
{
    UsrStruct.Username = userNameT.Text;
    UsrStruct.Password = passwordT.Text;
    DataSet ds = null;
    ds = baseFunction.Login(UsrStruct);
    if (ds.Tables[0].Rows.Count > 0)   //找到对应的用户名和密码
    {
       this.Hide();
     //  if (this.Visible == false)    // 加上这句也不行
     //  {
             MainWindow mw = new MainWindow(); 
             mw.Show();                  //显示主界面
     //  }
}
catch
{}

解决方案 »

  1.   

    this.ActiveForm.Hide();
    用这个试试
      

  2.   

           
      
    MainWindow mw = new MainWindow(); 
    mw.Show(); 
    this.Hide();换一下位置?
      

  3.   

    如果实在不行,可以把这个登录窗体移动旁边去:
     this.Left = -10000;
      

  4.   

    项目启动应该是主窗体,而this的指向也会是主窗体,只不过在主窗体构造前,弹出登录窗体,验证通过,主窗体显示,同时关闭登录窗体,也没必要隐藏
      

  5.   

    try
    {
        UsrStruct.Username = userNameT.Text;
        UsrStruct.Password = passwordT.Text;
        DataSet ds = null;
        ds = baseFunction.Login(UsrStruct);
        if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0)   //找到对应的用户名和密码
        {
           this.Hide();
           MainWindow mw = new MainWindow(); 
           mw.Show();                  //显示主界面
    }
    catch
    {
     
    }
      

  6.   

     mw.Show();改成mw.ShowDialog();
      

  7.   

    楼主,看一下这个,你就明白了
    WinForm 关闭登陆窗体,打开主窗体的实现. .
      

  8.   

     判断度数据库都在登录窗体里写,
    LoginResult loginResult= LoginResult.logout;
     try{  
       UsrStruct.Username = userNameT.Text;  
       UsrStruct.Password = passwordT.Text;   
       DataSet ds = null;   
       ds = baseFunction.Login(UsrStruct);  
       if (ds.Tables[0].Rows.Count > 0)   //找到对应的用户名和密码    
       {       
         loginResult = LoginResult.login;
      this.Close();
      }
      }
      catch  
      {
      }
    }
    在Program.cs里写
     static void Main()
            {
    FormMain mainFrm = null;
    FormLogin loginForm = new FormLogin();
     loginForm.ShowDialog();
     if (loginForm.loginResult == LoginInterface.LoginResult.logout)
        {
          return;
       }
    mainFrm = new FormMain();
                        Application.Run(mainFrm);
    }
      

  9.   


    我开始也是这样子想的,我觉得应该是一个时间段的问题,Hide完你的代码不是直接Show另一个吗,平时你Hide一个窗口,貌似也需要时间的吧,这是微软内部设定的时间段
      

  10.   


    我开始也是这样子想的,我觉得应该是一个时间段的问题,Hide完你的代码不是直接Show另一个吗,平时你Hide一个窗口,貌似也需要时间的吧,这是微软内部设定的时间段
    你的意思是来不及?
      

  11.   


           MainWindow mw = new MainWindow(); 
    this.Hide();
           mw.Show();