Следующее решение работает так, как вы ожидаете.
Чтобы попробовать этот пример кода, создайте новое приложение WinForms в Visual Studio (например, Файл --> Новый проект, выберите Visual C# --> Классический рабочий стол Windows и используйте шаблон Приложение Windows Forms (.NET Framework)), затем добавьте второй форма.
Убедитесь, что две формы названы Form1
и Form2
, а затем измените код в сгенерированном решении следующим образом:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.FormClosed +=
new System.Windows.Forms.FormClosedEventHandler(this.Form1_FormClosed);
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
(new Form2()).Show();
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
this.FormClosed +=
new System.Windows.Forms.FormClosedEventHandler(this.Form2_FormClosed);
}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
Application.Exit();
}
}
А это точка входа приложения, измените ее следующим образом:
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//Show first form and start the message loop
(new Form1()).Show();
Application.Run(); // needed, otherwise app closes immediately
}
}
Хитрость заключается в использовании Application.Run() без параметров и Application.Exit() в точке, где вы хотите выйти из приложения.
Теперь, когда вы запускаете приложение, открывается Form1
. Щелкните X (правый верхний угол), и форма Form1 закроется, но вместо нее появится Form2
. Нажмите X еще раз, и форма закроется (а также выйдет из приложения).
Вместо того, чтобы поместить запуск Form2
в событие FormClosed, вы также можете создать кнопку Button1, которая выполняет эту работу, но в этом случае не забудьте закрыть форму, к которой принадлежит кнопка, через this.Close()
явно:
private void button1_Click(object sender, EventArgs e)
{
(new Form2()).Show(); this.Close();
}
person
Matt
schedule
22.11.2012