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#ファイル内のクラスはフォームのクラスのみにして、再度デザイナで開けるか確認します。~
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)
{
/* コード */
}
}
}
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を愛用