ApplicationContext の MainForm プロパティでメインフォームを切り替えることが出来ます。
C#
1using System;
2using System.Windows.Forms;
3
4static class Program
5{
6 public static ApplicationContext applicationContext;
7
8 [STAThread]
9 static void Main()
10 {
11 Application.EnableVisualStyles();
12 Application.SetCompatibleTextRenderingDefault(false);
13 applicationContext = new ApplicationContext();
14 applicationContext.MainForm = new Form1();
15 Application.Run(applicationContext);
16 }
17}
18
19public partial class Form1 : Form
20{
21 public Form1()
22 {
23 InitializeComponent();
24 }
25
26 private void button1_Click(object sender, EventArgs e)
27 {
28 var f = new Form2();
29 Program.applicationContext.MainForm = f;
30 f.Show();
31 this.Close();
32 }
33}
#追記
VB6 風に、フォームが残っていたらメインフォームを自動で切り替えるようにしてみました。
(VB.NET の「Windowsアプリケーションフレームワークプロパティ」の
「シャットダウンモード」を「最後のフォームが閉じるとき」にしたときの動き)
C#
1using System;
2using System.Windows.Forms;
3
4static class Program
5{
6 [STAThread]
7 static void Main()
8 {
9 Application.EnableVisualStyles();
10 Application.SetCompatibleTextRenderingDefault(false);
11 Application.Run(new AutoApplicationContext(new Form1()));
12 }
13}
14
15class AutoApplicationContext : ApplicationContext
16{
17 public AutoApplicationContext(Form form) : base(form) { }
18
19 protected override void OnMainFormClosed(object sender, EventArgs e)
20 {
21 foreach (Form form in Application.OpenForms)
22 {
23 if (!form.InvokeRequired)
24 {
25 this.MainForm = form;
26 return;
27 }
28 }
29 base.OnMainFormClosed(sender, e);
30 }
31}
32
33public partial class Form1 : Form
34{
35 public Form1()
36 {
37 InitializeComponent();
38 }
39
40 private void button1_Click(object sender, EventArgs e)
41 {
42 var f = new Form1();
43 f.Show();
44 this.Close();
45 }
46}
47