[C#] Windowsフォームのデザイナーエラー解決方法 [Windows Forms]

C#

この記事では、Visual studioのWindowsフォームでデザイナーエラーが発生した際の解決法を解説します。

この記事はこんな人におすすめ!
犬

Windowsフォームでエラーが出た!デザイナーエラーって何?

猫

「名前が存在しません」と言われましても!

鳩

エラーの解消方法が知りたい!

Windowsフォームでのデザイナーエラーが発生する原因から、具体的な解消法まで解説していますのでぜひ参考にしてください!

 

デザイナーエラーについて

エラー画面例

Windowsフォームの開発をしていると、以下のような画面が表示されることがあります。

この画面は、Windowsフォームのデザイナー(GUIの編集画面)が何らかの理由で表示できない場合に表示されるエラーページです。

 

エラーの原因調査方法

デザイナーのエラーといっても、デザイナーファイル(.Designer.cs)が原因とは限りません。ソースファイル(.cs)に問題がある場合や、それ以外の可能性も考えられます。

Windowsフォームのファイル構成

Form1という画面を作成した場合、以下の3つのファイルが生成されます。

  • Form1.cs
    フォームのソースファイル。主に編集するファイル。
  • Form1.Designer.cs
    フォームのデザインを定義するソースファイル。
    各コントロールの配置やプロパティの初期値などの情報が格納されている。
    デザインの編集はGUIデザイナー上で行い、このファイルには編集内容が自動的に反映されるため通常触ることはない。
  • Form1.resx
    フォームのリソースファイル。フォームに使用する画像や文字列などを保存している。
    リソースの追加は専用の編集画面で行うため、ソースを直接触ることは基本的にない。

 

エラーの原因は様々ですが、解決法のヒントはエラーページに記載されています。

①には、エラーに関する様々な情報が記載されています。

  • エラーが発生しているファイル名
  • エラーが発生しているファイル内の行、列番号
  • エラーコード
  • エラーメッセージ

②をクリックすると、エラー発生ファイルの該当行に移動します。

 

「名前は存在しません」エラーの解決例

上記エラー画像の例では、「radioButton_CheckedChangedという名前が存在しない」エラーが出ています。エラーコードはCS0103です。

エラーが発生しているデザイナーファイルに飛んでみると、InitializeComponentメソッドの、ラジオボタンのCheckedChangedイベントに「radioButton_CheckedChanged」を追加する処理が原因でした。

この「radioButton_CheckedChanged」というメソッドが存在していないのがエラーの原因です。

 

ソースファイル「Form1.cs」を見てみると、確かに「radioButton_CheckedChanged」というメソッドが定義されていませんでした。

メソッドを作成すると、エラーが解消されました。


メソッド名の記述を間違えていたりして、ソースファイルとデザイナーファイルでメソッド名が一致しない場合も同様のエラーが発生します。メソッド名が合っているかよく確認してみましょう。

 

その他エラー解決例

上記エラー以外にも様々な原因でエラーページが表示されます。

解決方法の一部をご紹介します。

クリーンしてみる

プロジェクトフォルダー内の一時ファイルがエラーの原因となっている場合、クリーンでファイルを削除すれば改善する可能性があります。

 

デザイナーファイルを開き直してみる

エラーは解消しているはずなのにエラーページが直らない場合は、デザイナーファイル(.Designer.cs)を一度閉じて開き直してみましょう。

 

まとめ

以下は当記事のまとめです!

  • デザイナーを開けずエラーになった場合は、エラーページ内のメッセージを確認する
  • 「***という名前は存在しません」エラーの場合、ソースファイルに存在しない変数やメソッドがデザイナー上で記述されている可能性がある。
  • ソリューションをクリーンしてみるとエラーが解消することがある。
  • エラーが直っているはずなのにエラーページが出続ける場合は、デザイナーファイルを開き直してみる。

以上です!
当ブログでは他にも様々なC#関連記事を掲載していますので、ぜひご一読ください!
サンプルコードも多数掲載しています!

コメント

タイトルとURLをコピーしました