2014-10-27 71 views
0

我有一个使用多个窗体的Windows窗体应用程序。该程序首先运行带有登录屏幕的表单,该登录屏幕允许用户使用其设置选择特定配置文件,并且有一个按钮可打开另一个表单以创建新配置文件。正确地在C中打开和关闭多个窗体窗体#

的代码我使用看起来像这样

Form2 secondform = new Form2(); 

private void aButton_Click(object sender, EventArgs e) 
{ 
    this.Hide(); 
    secondform.Show(); 
} 

当我尝试使用

this.Close(); 

,而不是

this.Hide(); 

整个应用程序退出,即使我把它显示新的形式后。

的问题是,一旦你输入的主程序,只有这样,才能关闭程序完全是点击退出按钮,我已经把在那里,它采用

Application.Exit(); 

如果您尝试右键单击任务栏图标并从那里关闭,或使用红色退出按钮,该过程仍在运行,并且必须从任务管理器终止。

我该怎么做才能让应用程序正确关闭?

+0

你尝试关闭是第一个通过你的应用程序打开的形式? – Steve 2014-10-27 15:08:09

回答

2

您应修改您的WinForm应用程序的主入口点,即“在Program.cs”文件的静态主要方法,显示登录表单作为一个模式对话框出现,然后调用Application.Run( )方法与主窗体的实例。下面是一个简单的例子:

static class Program 
{ 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 

     // Show the login form 
     LoginForm loginForm = new LoginForm(); 
     loginForm.ShowDialog(); 

     // Show the main form 
     Application.Run(new MainForm()); 
    } 
} 

class LoginForm : Form 
{ 
    public LoginForm() 
    { 
     BackColor = Color.Blue; 
     Text = "Login Form"; 
    } 
} 

class MainForm : Form 
{ 
    public MainForm() 
    { 
     BackColor = Color.Red; 
     Text = "Main Form"; 
    } 
} 

上面的代码首先会显示一个虚设登录表单(蓝色),并且当它关闭时,主要形式(红色)将被显示。代码非常简单,不需要隐藏和特殊关闭表单等等。

+1

啊哈!太棒了,我知道有一些方法可以正确地做到这一点。谢谢,form.ShowDialog();正是我所需要的。 – electroball09 2014-10-27 15:28:33

0

您可以使用退出按钮在窗体上使用form.closing事件。然后使用application.close()。 您也可以将登录表单引用到其打开的表单中(因为其他原因您可能需要这样做),然后您可以使用全局表单并将登录表单存储在该表单中。然后执行loginForm.close()以退出应用程序。

1

您可以尝试是这样的:

private void aButton_Click(object sender, EventArgs e) 
{ 
    this.Hide(); 
    secondform.Show(); 
    secondform.FormClosed += new FormClosedEventHandler(sf_FormClosed); 
} 
void sf_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    Application.Exit(); 
}