2013-10-13 34 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(); 
     } 
    }