2010-08-17 100 views
7

我無法隱藏登錄表單的主窗體。一旦用戶登錄後關閉登錄表單並顯示主窗體。C#登錄示例

我一直在困惑自己,我刪除了所有的代碼,並開始新鮮。我可以隱藏登錄表單。

我無法隱藏調用

Application.Run(new MainForm()); 

登錄形式的主要形式是這樣的:

namespace WindowsFormsApplication1 
{ 
    public partial class LoginForm : Form 
    { 
     public LoginForm() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      string username; 
      string password; 

      username = TB_username.Text; 
      password = TB_password.Text; 

      if (User.Login(username, password)) 
      { 
       Globals._Login = true; 

       // Close login form 
       this.Dispose(false); 

      } 
      else 
      { 
       MessageBox.Show("Login Failed"); 
      } 

     } 
    } 
} 

我無法弄清楚如何隱藏然後顯示的主要形式,一旦登錄已過。

由於任何的例子將是巨大的

+0

,當你調用 「隱藏()」 中的MainForm中會發生什麼? – Blam 2010-08-17 23:49:23

+0

不相關,但考慮使用'SecureString'而不是'String'作爲登錄的密碼部分。 – JaredPar 2010-08-17 23:50:59

回答

20
  1. 使用ShowDialog()打開登錄表單。那麼你不需要自己隱藏或禁用Mainform。事實上,如果你想登錄表單出現在應用程序的開始,考慮出即使裝載的MainForm收到:

    static void Main() 
    { 
        Application.SetCompatibleTextRenderingDefault(false); 
        Application.EnableVisualStyles(); 
        DialogResult result; 
        using (var loginForm = new LoginForm()) 
         result = loginForm.ShowDialog(); 
        if (result == DialogResult.OK) 
        { 
         // login was successful 
         Application.Run(new Mainform()); 
        } 
    } 
    
  2. 內,您的登錄表單,在button1_Click,使用

    DialogResult = DialogResult.OK; 
    

    關閉登錄窗體並將OK結果傳遞給Mainform。 不需要Dispose()

+0

謝謝工作。 – Joe 2010-08-18 00:13:40

+0

任何人都可以解釋我將如何獲得Mainform的用戶詳細信息。 – Sribin 2017-12-19 11:32:50

0

使用登錄表單,以從所述應用程序的主模內加載登錄表單上的ShowDialog()函數。這將阻止直到LoginForm完成後才顯示MainForm。

private void MainForm_Load(object sender, EventArgs e) { 
    var loginForm = new LoginForm(); 
    loginForm.ShowDialog(); 
} 
1

所以...這是我的登錄:)你可以喜歡它或不喜歡,但是...這是我的解決方案。

private void FRIIB_Load(object sender, EventArgs e) 
    { 
     try 
     { 
      QueryBuilder.insql = Crypto.DecryptStringAES(Model.DecryptRegisteryValue("inSQL"), "inSQL"); 
     } 
     catch (Exception exc) 
     { 
      MessageBox.Show(exc.Message); 
     } // getting connection string 
     if (!(new Func<bool>(() => 
       { 
        Func<bool> l = null; l =() => 
        { 
         using (LoginForm loginDialog = new LoginForm()) 
         { 
          loginDialog.ShowDialog(); 
          loginDialog.Focus(); 
          if (loginDialog.IsExit) return false; 
          else 
           if (loginDialog.IsAuthorized) return true; 
           else return l(); 
         } 
        }; return l(); 
       } 
      )() 
      )) Close(); 
     else w8(() => LoadData()); 
    } 

這裏是一些代碼說明:

private void w8(Action action) 
    { 
     Cursor.Current = Cursors.WaitCursor; 
     Application.DoEvents(); 
     action(); 
     Cursor.Current = Cursors.Default; 
    } 

Public Class DamnLogin 
    Private db As FRIIB 

    Public Sub New(ByVal connection As String) 
     db = New FRIIB(connection) 
    End Sub 

    Public Function Login(ByVal name As String, ByVal password As String) As Boolean 
     Dim GetUser = _ 
      From u In db.GetTable(Of [User])() _ 
      Where u.Name = name _ 
      And u.Password = password _ 
      Select u 
     Return GetUser.Count = 0 
    End Function 
End Class 

let Login usename password = 
    new LinqBase.DamnLogin(insql) |> fun damn -> 
     not <| damn.Login(usename,password) 

和登錄表單

public partial class LoginForm : Form 
{ 
    bool isAuthorized; 
    bool exit; 

    public bool IsAuthorized { get { return this.isAuthorized; } } 
    public bool IsExit   { get { return this.exit;   } } 

    public LoginForm() 
    { 
     isAuthorized = false; 
     exit   = false; 

     InitializeComponent(); 
    } 

    private void Close_Click(object sender, EventArgs e) 
    { 
     exit = true; 
     this.Close(); 
    } 

    private void LoginButton_Click(object sender, EventArgs e) 
    { 
     if (Login.Text != "") 
     { 
      if (Login.Text.ToUpper() == "ADMIN") 
      { 
       if (Password.Text == Crypto.DecryptStringAES(Model.DecryptRegisteryValue("Password"), "Password")) 
        isAuthorized = true; 
      } 
      else 
      { 
       if (QueryBuilder.Login(Login.Text, Password.Text)) 
        isAuthorized = true; 
      } 
     } 

     this.Close(); 
    } 
}