1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

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

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

もしくは

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

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

見直す点

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

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

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

サンプル

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

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?