Visual Basic を使用して多段継承したフォームがデザイナーで開けない場合がある

現象
Visual Studio 2010 を使用して 2 段階以上継承したフォームをデザイナーで開くと、「値を Null にすることはできません。パラメーター名: objectType」というエラーが発生し、正しく開けない場合があります。
この現象が発生すると、デザイナーには次のようなエラー メッセージが表示されます。本現象は、Visual Basic でのみ発生し、Visual C# 等、他の言語では発生しません。また、Visual Studio 2012 ではこの問題は修正されており、発生しません。

値を Null にすることはできません。パラメーター名: objectType
原因
Handles 句によりイベント ハンドラーが宣言されることでデザイナーが正しく機能しないことが原因です。
解決方法
本現象は、基本クラスにあるオブジェクトのイベントを、2 段階以上先の派生クラスでハンドルする際、Handles 句を使用することで発生します。
このため、この Handles 句により宣言されたイベント ハンドラーを AddHandler ステートメントを使用して修正し直すことで正しく開けるようになります。

以下は、このエラーが発生するコードの一例です。この状態でフォームをデザイナーで開くとエラーとなります。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

この記述を以下のように修正すると、正しく開けるようになります。

  1. Handles 句の部分を削除します。

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
  2. フォームのコンストラクタの箇所に AddHandler ステートメントを使用して、ボタンのクリックイベントにイベント ハンドラーを関連付けます。

    Public Sub New()
    ' この呼び出しはデザイナーで必要です。
    InitializeComponent()

    ' InitializeComponent() 呼び出しの後で初期化を追加します。
    AddHandler Button1.Click, AddressOf Button1_Click
    End Sub
補足:
  「エラーを無視して続行する」を選択することで、対象のフォームをデザイナーで開くことはできますが、Handles 句で宣言されたイベント ハンドラーが一部削除され機能しなくなる場合がありますので、
上記回避策を実施せず、「エラーを無視して続行する」を選択することは推奨いたしかねます。
詳細
以下は、本現象を再現する手順の一つです。
  1. Visual Studio 2010 により [Visual Basic] – [Windows フォーム アプリケーション] を作成します。
  2. Form1 に Button コントロールを追加し、Button1 という名前を設定します。
  3. プロジェクトの [追加] - [Windows フォーム] から [継承されたフォーム] を選択し、Form1 を継承した Form2 を追加します。
  4. プロジェクトの [追加] - [Windows フォーム] から [継承されたフォーム] を選択し、Form2 を継承した Form3 を追加します。
  5. Form3.vb に以下のコードを追加します。
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    End Sub
  6. Form3 をデザイナーで開くとエラーが発生します。

状況
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
注意 : これは、マイクロソフトのサポート組織内で直接作成された "緊急公開" の資料です。 この資料には、確認中の問題に関する現状ベースの情報が記載されています。 情報提供のスピードを優先するため、資料には誤植が含まれる可能性があり、予告なしに随時改定される場合があります。 その他の考慮事項については、使用条件を参照してください。
プロパティ

文書番号:2859247 - 最終更新日: 09/29/2016 15:00:00 - リビジョン: 3.0

Microsoft Visual Studio 2010 Ultimate, Microsoft Visual Studio 2010 Premium with MSDN, Microsoft Visual Studio 2010 Professional, Microsoft Visual Basic 2010 Express

  • KB2859247
フィードバック