2008-12-25 70 views
2

我是C#和.NET編程的新手。我想設計一個打開小登錄屏幕的應用程序,當用戶按下「登錄」按鈕時,我的程序應關閉登錄表單並傳遞給新表單。我怎樣才能實現這個簡單的過程?C中的兩種不同的窗體形式#

謝謝。

回答

9

這可能是一個解決方案;

在LoginForm;

public bool IsLoggedIn { get; private set;} 
public void LoginButton_Click(object sender, EventArgs e) 
{ 
    IsLoggedIn = DoLogin(); 
    if(IsLoggedIn) 
    { 
    this.Close() 
    } 
    else 
    { 
    DoSomethingElse(); 
    } 
} 

在Program.cs的

static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    LoginForm loginForm = new LoginForm(); 
    Application.Run(loginForm); 
    if (loginForm.IsLoggedIn) 
    { 
    Application.Run(new OtherForm()); 
    } 
} 
0

這裏的挑戰是什麼樣的形式傳遞給Application.Run()方法。如果您使用登錄表單實例啓動應用程序,然後關閉該表單,我相信應用程序將退出。毫無疑問,有幾種方法可以處理...

一種方法是將主窗體的實例傳遞給Application.Run方法(這將消息循環綁定到該窗體實例而不是登錄窗體)。在主窗體的OnLoad方法中,您可以使用模態對話框來執行登錄。即

//--Main form's OnLoad method 
protected override void OnLoad(EventArgs ea) 
{ 
    // Remember to call base implementation 
    base.OnLoad(ea); 

    using(frmLogin frm = new frmLogin()) 
    { 
     if(frm.ShowDialog() != DialogResult.OK) 
     { 
      //--login failed - exit the application 
      Application.Exit(); 
     } 
    }  
} 
+0

爲什麼你必須退出應用程序,如果登錄失敗?無法登錄時,您的瀏覽器或選項卡是否關閉? – 2008-12-25 15:11:57

2

根據您的應用程序的整體架構,我經常喜歡讓主窗體控件啓動登錄屏幕。

//Program.cs: 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new MainForm()); 
    } 

    //MainForm.cs 
    private void MainForm_Load(object sender, EventArgs e) 
    { 
     this.Hide(); 
     Login login = new Login(); 
     if (login.ShowDialog() == DialogResult.OK) 
     { 
      //make assignments from login 
      currentUser = login.User; 
     } 
     else 
     { 
      //take needed action 
      Application.Exit(); 
      return; 
     } 
    } 
0

如果你使用.ShowDialog(),不要忘了把它包裝的使用塊周圍,或登錄表單上使用.Dispose在完成後。模型對話框必須手動處理。