2013-10-13 60 views
0

我的Windows窗體應用程序中共有3種表單(Form1,Form2和Form3)。關閉C#中的多個表格#

Form2是登錄頁面。當用戶單擊Form 1中的登錄按鈕時,Form 2必須打開,如果用戶提供了準確的用戶名和密碼,則需要Form 3來打開和關閉Form 1和Form 2。

如何在C#中編寫這樣的東西?我使用Microsoft Visual Studio 2012

到目前爲止,我已經做了以下程序:

雙擊Form1以獲得在編碼窗口和wrote-

Form2 secondForm = new Form2(); 

只是外面的Form Load事件

&按鈕裏面,我wrote-

secondForm.Show(); 

因此,當我運行解決方案時,通過單擊Form1(Works Perfectly!)中的按鈕打開Form2。但是當用戶在Form2中輸入正確的用戶名和密碼組合來打開Form3時,我不知道如何關閉Form1和Form2。

Form1 firstForm = new Form1(); 
firstForm.Close(); 

未關閉窗體。

請指導我。

+1

它不封閉形式,因爲你正在創建一個新的Form1中,您關閉新Form1,而不是關閉現有的表單。 – ProgramFOX

+0

是否有理由創建一個'Form3'而不是返回到'Form1'? – 2013-10-13 17:46:22

回答

0

您應該使用Main()方法添加一個新類。 (OR)你的項目中會有Program.cs。

然後,從Main()方法啓動應用程序。您可以將項目的「啓動對象:」屬性更改爲「<YourApplicationName> .Program」。

Main()方法應該顯示Form1Form2作爲對話框。

如果DialogResultOK然後通過Application.Run()方法運行Form3方法。

DialogResult r; 
r = (new Form1().ShowDialog()); 
if(r == DialogResult.OK) 
Application.Run(new Form3()); 
0

如果你這樣做,將無法關閉主窗體(你用來啓動消息循環的那個窗體)將會結束/關閉整個應用程序。你可以做然而相反的是這樣的:

Form1的代碼

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     var f2 = new Form2(); 

     var res = f2.ShowDialog(); 

     if (res == DialogResult.OK) 
     { 
      var f3 = new Form3(); 
      this.Visible = false; 
      f3.ShowDialog(); 
      this.Close(); 
     } 
    } 
} 

Form2的代碼:

public partial class Form2 : Form 

    { 
     public Form2() 
     { 
      InitializeComponent(); 
     } 

     private void buttonLogin_Click(object sender, EventArgs e) 
     { 
      // if username and password is ok set the dialog result to ok 
      this.DialogResult = DialogResult.OK; 

      this.Close(); 
     } 
    }