2015-06-30 9 views
0

我有兩種形式,即frmLoginfrmDash。我的用戶名和密碼保存在credentials.txt文件中。我的默認運行表格是frmLogin。現在我的問題是,當應用程序啓動時,它會從credentials.txt檢查用戶名和密碼,並直接顯示frmDash。它的工作,但問題是,與frmDash,frmLogin也在後面開幕。如何解決這個問題?如何限制窗體以winforms加載c#

我曾經嘗試這樣做(Form1的是frmLogin):

private void Form1_Load(object sender, EventArgs e) 
     { 
      try 
      { 
       var credentialLines = File.ReadAllLines(Environment.CurrentDirectory + "\\credentials\\credentials.txt"); 
       if (credentialLines.Any()) 
       { 
        UserName_reLogin = credentialLines[0]; 
        Password_reLogin = credentialLines[1]; 
        if (LoginUser(Log_API, UserName_reLogin, Password_reLogin)) 
        { 
         logIn_Status = "true"; 
         GlolbalUtil.LogIn_Status = logIn_Status; 

         //this.Hide(); 

         frmDash frmDash = new frmDash(); 
         frmDash.Owner = this; 
         frmDash.Show(); 
         txtUsername.Text = ""; 
         txtPassword.Text = ""; 
         //GlolbalUtil.accept_status = "1"; 
         this.Enabled = false; 
        } 
        else 
        { 
         MessageBox.Show("Please Check Username and password"); 

        } 

       } 
       else 
       { 
        this.Enabled = true; 
       } 
      } 
      catch 
      { 
      } 
     } 
+0

你在frmLogin之外是什麼意思?這一定是在frmLogin,因爲我從.txt文件獲取用戶名和密碼到這個表單登錄 –

+2

你只是在最糟糕的地方做它。 Load事件的一個常見問題,如果你認爲你需要它,那麼你可能是錯的。在調用者中執行它,無論代碼如何創建此表單對象。對於「登錄」,通常是Program.cs中的Main()方法。當你不快樂時不要創建表單。 –

+0

http://stackoverflow.com/a/21063756/17034 –

回答

0
private void FrmLogin_Shown(object sender, EventArgs e) 
     { 
      if (GlolbalUtil.authenticate == "true") 
      { 
       this.Hide(); 
      } 
      else if(GlolbalUtil.authenticate == "false") 
      { 
       this.Show(); 
      } 
     } 

GlobalUtil.authenticate是全局變量來檢查,如果用戶登錄或沒有。如果用戶登錄意味着GlobalUtil.authenticate=="true",那麼只有frmLoginhide否則show。完美地工作。

1

移動到您的登錄邏輯在Program.cs的主要功能是這樣的

var credentialLines = File.ReadAllLines(Environment.CurrentDirectory + "\\credentials\\credentials.txt"); 
if (credentialLines.Any()){ 
     UserName_reLogin = credentialLines[0]; 
     Password_reLogin = credentialLines[1]; 
if (LoginUser(Log_API, UserName_reLogin, Password_reLogin)){ 
    Application.Run(new frmDash()); 
}else{ 
Application.Run(new frmlogin()); 
} 
}else 
{ 
Application.Run(new frmlogin()); 
} 
+0

'LoginUser'是用'frmLogin.cs'編寫的方法。我怎麼能把這個在program.cs –

+0

一迪必須做全球那麼多的變量然後 –

+0

爲此frmlogin創建新的對象frmlogin f = login = new frmlogin(); –

0

首先,你應在打開登錄表單之前檢查證書是否存在。

但無論如何隱藏表單使用this.Hide();隱藏形式

+0

我已經嘗試過'this.Hide()'不能正常工作 –

+0

。 所以一個好的做法是在登錄表單中設置DialogResults,然後在Close();設置 ,這樣你就可以在主要方法中檢查結果了 – Erez