Следующее решение работает, как вы ожидаете.
Чтобы попробовать этот пример кода, создайте новое приложение WinForms в Visual Studio (то есть Файл -> Новый проект, выберите Visual C # -> Windows Classic Desktop и используйте шаблон «Приложение Windows Forms (.NET Framework)») , затем добавьте 2-ую форму.
Убедитесь, что две формы имеют имена 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, вы также можете создать кнопку, которая выполняет эту работу, но в этом случае не забудьте закрыть форму, к которой принадлежит кнопка, с помощью this.Close()
в явном виде:
private void button1_Click(object sender, EventArgs e)
{
(new Form2()).Show(); this.Close();
}