WinForms でアプリケーションを開発していて、(閉じる前までは) デザイナで開けていたフォームが開けなくなり、次のエラーが報告されるケースで見直す点をメモする。
値をNull にすることはできません。パラメーター名:source
もしくは
オブジェクト参照がオブジェクト インスタンスに設定されていません。
Visual Studio 2015 は確か上のエラー、同 2019 では下のエラーメッセージになった。
見直す点
このエラーは、ArgumentNullException
を受け取ったデザイナが表示している。
デザイナがフォームを表示するとき、フォームに貼り付けられたすべてのコントロールをインスタンス化、そして Load
も呼び出す。その過程で、誰かが 引数に null を与えてはいけないメソッドに null を与えた ことで例外がスローされた。
したがって、フォームの Load 時に呼び出されるイベントのコールバックを見直せばよい。
サンプル
次に、端的なサンプルと再現手順を挙げる。
- Visual Studio で WinForms プロジェクトを生成して、プロジェクトにカスタムコントロールを追加してフォームに貼り付ける。
- 貼り付けた後に、次のコメントアウト部分を有効にしてフォームを保存する。
- フォームを閉じて、開きなおす。
- 上記のエラーが発生する。
public partial class UserControl1 : UserControl
{
// 前略
IEnumerable<string> s;
private void UserControl1_Load(object sender, EventArgs e)
{
//if (s.Count() > 0)
//{
// // somthing...
//}
}
}
エラーメッセージの パラメータ名:
以降に表示されるのは、例外をスローしたメソッドが Null を検出した仮引数名のようだ。
確認した環境
- Visual Studio: Microsoft Visual Studio Community 2019, Microsoft Visual Studio Community 2015
- Windows: Windows 10 Home