2017-03-04 28 views
0

我的項目中有兩種形式(LoginMain)。我試圖找到的是,如果登錄成功,我必須顯示Main表單並關閉Login表單。當登錄成功時,我在Login表單中使用此方法關閉Login表單。但是當我關閉登錄表單時,所有表單都關閉。登錄表格關閉問題

+1

顯示你的代碼,請。 –

+0

看起來像你的登錄表單以第一種形式啓動(在'Program.cs'中,'Application.Run(new Form1());')。改變這一點,以便Application.Run啓動主表單,隱藏它,顯示登錄表單,如果登錄有效,關閉登錄表單並顯示主表單。 – Nino

+0

可能從http://stackoverflow.com/questions/4759334/how-can-i-close-a-login-form-and-show-the-main-form-without-my-application-closi複製 – Xavave

回答

0

你可以做到這一點,你的Program.cs中,在後臺運行的主要形式,並顯示它,當你成功授權用戶:

的Program.cs:

[STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     MainForm frm = new MainForm(); 
     Application.Run(); 
    } 

然後在你的主要形式,在成功授權,表現出來,在這種情況下,我把它放在構造函數:

public MainForm() 
    { 
     Login frmLogin = new Login(); 
     frmLogin.Show(); 

     if (frmLogin.ShowDialog(this) == DialogResult.OK) 
     { 
      this.Show(); 
      InitializeComponent(); 
     } 
    } 

確保您的登錄表單上,在成功authorizati添加這行代碼上:

this.DialogResult = DialogResult.OK; 
0

你可以把登錄表單,你檢查登錄成功的代碼如下。

 Form2 formmain = new Form2(); 
     this.Hide(); 
     if (formmain.ShowDialog() == DialogResult.OK) 
     { 
      Application.Run(new Form2()); 

     } 
     this.Close(); 
0

u能在Program.cs中時啓動的應用程序的main方法直接使用登錄表單..

該樣品conains 2種形式命名的MainForm和FrmLogin ..

Program.cs中

[STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 

     FrmLogin frmLogin = new FrmLogin(); 
     UserInfo userInfo = frmLogin.Login(); 
     if (userInfo != null) 
     { 
      // open main form with current user 
      Application.Run(new MainForm(userInfo)); 
     } 
    } 

UserInfo.cs

這個類包含loged用戶信息

public class UserInfo 
{ 
    // this fields are samples. 
    // you can add what do you need.. 
    public int Id { get; set; } 
    public string UserName { get; set; } 
    public DateTime LoginDate { get; set; } 
    public string Roles { get; set; } 
} 

FrmLogin

這種形式打開自己並檢查用戶並返回結果

你應該設置取消的DialogResult財產取消按鈕

// you need add these controls to form 
// txtUserName(TextBox) 
// txtPassword(TextBox) 
// btnOK (Button) // need click event 
// btnCANCEL(Button) 
public partial class FrmLogin : Form 
{ 
    public FrmLogin() 
    { 
     InitializeComponent(); 
    } 
    UserInfo currentUser; 
    private void btnOK_Click(object sender, EventArgs e) 
    { 
     var userName = txtUserName.Text; 
     var password = txtPassword.Text; 
     currentUser = GetUser(userName, password); 
     if (currentUser == null) 
     { 
      MessageBox.Show("invalid username | password"); 
      this.DialogResult = DialogResult.Cancel; 
     } 
     this.DialogResult = DialogResult.OK; 
    } 

    public UserInfo Login() 
    { 
     var dialogResult = this.ShowDialog(); 
     if (dialogResult != DialogResult.OK) 
      return null; 
     return currentUser; 
    } 
    private UserInfo GetUser(string userName,string passwrod) 
    { 
     // you should check from where users located area(like db) 
     if (userName.Equals("admin") && passwrod.Equals("test")) 
     { 
      return new UserInfo { 
       Id = 1, 
       LoginDate = DateTime.Now, 
       Roles = "Admin", 
       UserName ="admin" 
      }; 
     } 
     return null; 
    } 

} 

的MainForm

UserInfo _currentUser; 

public partial class MainForm : Form 
{ 
    UserInfo _currentUser; 

    public MainForm(UserInfo user) 
    { 
     _currentUser = user; 
     InitializeComponent(); 
    } 
}