MithrilWorks

[C#] 起動時にメインフォームを非表示にする

 C#では、Visible等を設定しても、起動時にメインフォームを非表示状態にすることができない。以下に起動時にメインフォームを非表示にする方法を紹介する。

Application.Runを使用する

 この方法は非推奨である。この方法に使用するApplication.Exitはアプリケーションを強制終了させる命令であり、.NETのバージョンによってはOnCloseやOnClosing等のイベントが発生しない可能性があり、また、プロセスの終了は保証されていないため、使用は避けるべきである。
Program.cs
1
2
3
4
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
new Form();
Application.Run();
 以上のコードをエントリポイント内に記述する。エントリポイントは通常、プロジェクト作成時にProgram.cs内に「Main」という名前で自動的に作成される。
 この方法を使った場合、メインフォームを閉じてもアプリケーションは終了しないため、Application.Exitを使用してアプリケーション自体を終了させる必要がある。Closeメソッド等も使用できない(フォームを閉じることはできる)。

最小化する

 タスクバーへの表示を無効にし、ウィンドウを最小化する方法である。以下にその方法を用いたクラスを示す。以下のクラスを継承したフォームを使用することで、起動時に不可視のフォームを作ることができる(その他の挙動は同じ)。
InvisibleForm.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System.Windows.Forms;

namespace MWLib
{
	public class InvisibleForm : Form
	{
		private bool first = true;

		public InvisibleForm()
		{
			WindowState = FormWindowState.Minimized;
			ShowInTaskbar = false;
		}

		public new void Show()
		{
			if (first)
			{
				ShowInTaskbar = true;
				WindowState = FormWindowState.Normal;
				first = false;
			}
			else
				base.Show();
		}
	}
}
 プロジェクトを作成した際に表示されるForm1の継承元クラスを上記のInvisibleFormに書き換えるだけで、起動時に非表示になる。
 上記コードは、インスタンス生成時にタスクバーへの表示を無効にし、フォームを最小化している。初回表示時にはそれらの状態を元に戻し、2回目以降は元のShowメソッドを呼ぶ。
 他にも、起動時にOpacityを0にして透明にする方法もあるが、それではWindows XP以前のOSでは普通に表示されてしまう。