Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9701

WinForms で「値をNull にすることはできません。パラメーター名:source」な場合に見直す点

$
0
0

WinForms でアプリケーションを開発していて、(閉じる前までは) デザイナで開けていたフォームが開けなくなり、次のエラーが報告されるケースで見直す点をメモする。

値をNull にすることはできません。パラメーター名:source

もしくは

オブジェクト参照がオブジェクト インスタンスに設定されていません。

Visual Studio 2015 は確か上のエラー、同 2019 では下のエラーメッセージになった。

見直す点

このエラーは、ArgumentNullExceptionを受け取ったデザイナが表示している。

デザイナがフォームを表示するとき、フォームに貼り付けられたすべてのコントロールをインスタンス化、そして Loadも呼び出す。その過程で、誰かが 引数に null を与えてはいけないメソッドに null を与えたことで例外がスローされた。

したがって、フォームの Load 時に呼び出されるイベントのコールバックを見直せばよい。

サンプル

次に、端的なサンプルと再現手順を挙げる。

  1. Visual Studio で WinForms プロジェクトを生成して、プロジェクトにカスタムコントロールを追加してフォームに貼り付ける。
  2. 貼り付けた後に、次のコメントアウト部分を有効にしてフォームを保存する。
  3. フォームを閉じて、開きなおす。
  4. 上記のエラーが発生する。
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

Viewing all articles
Browse latest Browse all 9701

Trending Articles