2014-03-13 42 views
2

我試圖在登錄表單成功登錄後切換Windows表單,我將移至主表單。問題是一旦用戶通過單擊登錄按鈕登錄,主窗體將打開,但登錄窗體停留在後臺,不會消失。我試過this.hide()和this.close,但它們不起作用。下面是一些從btnLogin事件的代碼...切換到其他表單後無法隱藏或關閉表單

 //connection to access database and checking if the user exist, ... 
     ... 
     if (!rdr.Read()) 
     { 
      MessageBox.Show("Wrong username or password."); 

     } 
     else 
      GlobalClass.GlobalVar = true; 
      GlobalClass.GlobalStr = rdr["user"].ToString(); 
      MainScreen _main = new MainScreen(); 
      _main.ShowDialog(); 

     rdr.Close(); 
     conn.Close(); 
     this.Close(); 

    } 
+3

您是否嘗試使用Show ShowDIalog – Felix

+0

也許http://stackoverflow.com/questions/9442435/why-is-it-that-my-form-is-not-closing-hiding?rq=1 – user2864740

+0

你是正確的使用Show()而不是ShowDialog的()。我也把Show()和this.Close放在括號裏,因爲它給了我「InvalidOperationException沒有數據存在行/列」的錯誤...謝謝 –

回答

1

您使用ShowDialog使用Show方法來代替,在這裏:

_main.Show(); 

當您使用ShowDialog程序等待,直到您關閉MainForm和line.So你的第二個表格沒有按不進入下一個」 t關閉直到您關閉MainForm

0

它可能更好地創建和顯示來自Program.cs的主要形式,然後展示並從主窗體的onload處理處置LoginDialog裏。

特別是如果LoginDialog是從Application.Run創建的,那麼關閉它就會退出應用程序,所以不是很有用。

0

您可以hide()然後close()但你必須這樣做和別人一樣使用事件表明我會用Show()方法,而不是ShowDialog()

我可能會首先在全局聲明主窗體。

MainScreen _main; 

然後,當你即將顯示登錄用的事件之後,主要以Hide()登錄表單,然後將事件Close()登錄表單,一旦主窗體關閉。

GlobalClass.GlobalVar = true; 
GlobalClass.GlobalStr = rdr["user"].ToString(); 
_main = new MainScreen(); 
_main.Load += new EventHanlder(_main_Load); 
_main.FormClosed += new FormClosedEventHandler(_main_FormClosed); 
_main.Show(); 

趕上事件Main表裝載Hide登錄形式,如:

private void _main_Load(object sender, EventArgs e) 
{ 
    this.Hide(); // Hides Login but it is till in Memory 
} 

趕上事件Main表關閉Close登錄形式,如:

private void _main_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    this.Close(); // Closes Login and remove this time from Memory 
} 
相關問題