Visual Studio でWindowsフォームアプリケーションのフォームデザイナを開くと「このファイルのデザイナーに、デザインできるクラスがないため、デザイナーを表示できませんでした。」エラーが表示される

Visual Studio でWindowsフォームアプリケーションのフォームデザイナを開くと「このファイルのデザイナーに、デザインできるクラスがないため、デザイナーを表示できませんでした。」エラーが表示される現象についての紹介です。

現象

Visual Studio で Windowsフォームアプリケーションのフォームをフォームデザイナで開くと下記のエラーメッセージが表示され、フォームデザインが開けません。
このファイルのデザイナーに、デザインできるクラスがないため、デザイナーを表示できませんでした。
英語では下記のエラーメッセージになります。
The designer could not be shown for this file because none of the classes within it can be designed.


コールスタックには下記が表示されています。
場所 System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.EnsureDocument(IDesignerSerializationManager manager)
場所 System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)
場所 Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)
場所 System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost host) 


原因

原因はいろいろありますが、フォームのデザイナファイルやフォームのコードなどに不具合のある可能性があります。

対処法

以下の対処法を試します。

方法1: フォームのコード内に別のクラスのコードが存在していないか確認する

下記のコードでは、フォームのC#のコードにフォームのクラス以外のクラス(InfoItem)が記述されています。フォームのC#ファイル内にはフォームクラス以外のクラスは極力記述しないほうが良いです。フォーム以外のクラスである InfoItemのクラスのコードをほかのファイルに移してフォームのC#ファイル内のクラスはフォームのクラスのみにして、再度デザイナで開けるか確認します。~
修正前 : FormMain.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TextBoxDemo
{
  public class InfoItem
  {
    /* 実装 */
  }

  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
   /* コード */
    }
  }
}
修正後 : FormMain.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TextBoxDemo
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
   /* コード */
    }
  }
}

方法2:ターゲット フレームワークの変更

新しいターゲット フレームワークに変更することで、問題が解決することがあります。
プロジェクトのプロパティを開き[ターゲット フレームワーク]のコンボボックスを開き、新しい.NET Framework のバージョンを選択します。


確認ダイアログが表示されますので、[はい]ボタンをクリックしてターゲット フレームワークを変更します。


ターゲットフレームワークの変更後、プロジェクトをビルドしてビルドが成功することを確認します。ビルドが成功した後、フォームをフォームデザイナで開きエラーが発生しないか確認します。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2018-09-25
iPentec all rights reserverd.