Ответ 1
Следующее решение работает так, как вы ожидаете.
Чтобы попробовать этот пример кода, создайте новое приложение WinForms в Visual Studio (например, File → New Project, выберите Visual С# → Windows Classic Desktop и используйте шаблон "Приложение 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, вы также можете создать кнопку, которая выполняет задание, но в этом случае не забудьте закрыть форму, к которой принадлежит кнопка, через this.Close()
в явном виде:
private void button1_Click(object sender, EventArgs e)
{
(new Form2()).Show(); this.Close();
}