■ はじめに
Form内での画面遷移において、以下のように画面を切り替える方法を考える ~~~~ Form1 => Form2 => Form3 ~~~~ 以下のようにForm1をメインに指定して、 Form1からForm2 に遷移した際に、Form1をCloseした場合、 プロセスは切れるので、Form2も自動的に消えてしまう ~~~~ static void Main() { ... Application.Run(new Form1()); } ~~~~ Form1を消した場合でも画面遷移できる方法を考える
■ 画面遷移の実装案
色々な方法があると思うし、どうとでもできると思うが... 【1】UserControlで実装する 【2】メイン画面を非表示にして切り替える 【3】ApplicationContext を利用して切り替える << 今回のテーマ etc...
【1】UserControlで実装する
http://punyo-er-met.hateblo.jp/entry/2016/04/10/103632の通り、メイン画面を設けて、 複数のUserControlを表示・非表示を切り替える ユーザコントロールについては、以下の関連記事を参照。UserControl (ユーザコントロール)
https://blogs.yahoo.co.jp/dk521123/21165720.html
【2】メイン画面を非表示にして切り替える
* 以下のように、メイン画面を非表示にして切り替える * これ以外にも、メイン画面をダミー・非表示にし司令塔として 画面を切り替えるなど色々できる
サンプル
private void button1_Click(object sender, EventArgs e) { var form2 = new Form2(); form2.Show(); this.Hide(); }
【3】ApplicationContext を利用して切り替える
サンプル
Program.csusing System; using System.Windows.Forms; namespace SampleForm { static class Program { /// <summary> /// アプリケーションのメイン エントリ ポイントです。 /// </summary> [STAThread] static void Main(string[] args) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new DemoApplicationContext()); } } // ★ここ★ public class DemoApplicationContext : ApplicationContext { public DemoApplicationContext() { this.MainForm = new Form1(this); } // ★画面遷移処理★ public void SwitchForm(Form nextForm) { var perviousForm = this.MainForm; this.MainForm = nextForm; perviousForm.Close(); nextForm.Show(); } } }Form1.cs
using System; using System.Windows.Forms; namespace SampleForm { public partial class Form1 : Form { private DemoApplicationContext context; public Form1(DemoApplicationContext applicationContext) { InitializeComponent(); this.context = applicationContext; } private void button1_Click(object sender, EventArgs e) { this.context.SwitchForm(new Form2(this.context)); } } }Form2.cs
* Form1とほとんど同じなので省略