Formをアクティブにせず表示

Formクラスのインスタンスを表示する場合は、FormのインスタンスメソッドであるShow()を呼び出します。
もちろんShowなので表示されます。
そして新しいFormが表示されると今までアクティブだったFormはNonアクティブになります。


普通はこれでいいのですが、Showするときにアクティブ化せずに表示したいという場合があります。
ですがこれを.Netのレベルでする方法が見当たりません。
なので困ったときのWin32APIです。


アクティブ化せずに表示するときのコードが以下になります。

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

Form form = new Form();
ShowWindow(form.Handle, 8);

まずWin32APIのShowWindowをDllImportして、第1引数にFormのHandleを。
第2引数には定数を指定します。今回は8という定数ですがこれはSW_SHOWNAとして定義されていたものです。


具体的なShowWindowの意味や他の定数などはmsdnを参照してください。


簡単ですが今回はこれで終わり。