Posted at

Form.Showをusingで囲んじゃだめだよ

More than 1 year has passed since last update.

Windows FormsのFormはIDisposableなので、usingで囲って使うことがよくある。


よくある例

using (var f = new Form())

{
f.ShowDialog();
}

ShowDialogだとこれでいいんだが、Showだと問題がある。


よくない例

using (var f = new Form())

{
f.Show();
}

Showメソッドはすぐに処理が返ってくるので、即座にusingを抜けてDisposeされる。

つまり、表示した次の瞬間には消える。

usingを使わず、単にnewしてShowすればいい。


よい例

var f = new Form();

f.Show();

Showメソッドで表示した場合、Formを閉じた時点でリソースも解放されるそうだ(細かいことは未確認)。

みんなはForm.Showをusingで囲むなんてあほなミスしないでね!

一応サンプルコード

.NET 4.6.1で確認したけど、たぶんバージョンによらないと思う。