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