【トラブル】【Form】デザイナーに関するトラブルシューティング

■ デザイナーに表示されなくなる [1]

 * 以下のように独自で作成したFormクラスを継承した基底クラス「BaseForm」を作成し
   その基底クラスを組みこんでビルドすると、以下の「エラー内容」が表示され
   デザイナーに表示されなくなった
~~~~~
public class BaseForm : Form
{
  // ...


public class SampleForm : BaseForm
{
  // ...
~~~~~

エラー内容

ファイル内にデザインできるクラスがないため、このファイルのデザイナーを表示できませんでした。
ファイルの以下のクラスがデザイナーで見つかりました: SampleForm
 --- 基本クラス 'BaseForm' を読み込めませんでした。 
アセンブリが参照されているか、およびすべてのプロジェクトがビルドされているかを確認してください。

原因

 * 以下のサイトの通り。
https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/b3914f86-7a4a-44e8-9abc-caa0a8dfeda1/32153252151250112457125401251212434203162510412375124241235812?forum=csharpgeneralja
より抜粋
~~~~~~~~
継承フォームを参照する際にはその継承元となるフォームを含むアセンブリVisual Studio がプロセス内に読み込みます。
ただし、Visual Studio は 32bit プロセスですので、
x64 を対象としたアセンブリを読み込めず、デザイナでエラーになります。
~~~~~~~~

解決案

 * x64ビルドを、Any CPUでリビルド
  => 無事に表示

■ デザイナーに表示されなくなる [2]

 * 「エラー内容」「コール スタック」が表示されて、デザイナーに表示されなくなる。

エラー内容

クラス Form1 はデザインできますが、ファイルの最初のクラスではありません。
Visual Studio では、デザイナーはファイルの最初のクラスを使用する必要があります。
クラスがファイルの最初のクラスになるようにクラス コードを移動して、
デザイナーを再度読み込んでください
コール スタック
1.   コール スタックの非表示 
 
場所 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)
場所 Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.DeferredLoadHandler.Microsoft.VisualStudio.TextManager.Interop.IVsTextBufferDataEvents.OnLoadCompleted(Int32 fReload)  

原因

 * Formファイルに別クラスを定義しているから
Form1.cs
namespace Study
{
    // 【原因】Formファイルに別クラス↓を定義しているから
    public class Person
    {
        public string Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }

    public partial class Form1 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }

        ・・・略・・・
    }
}

対応方法

 * 別クラスを移動させる
Form1.cs
namespace Study
{
    public partial class Form1 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }

        ・・・略・・・
    }

    // 【対応方法】別クラス↓を移動させる
    public class Person
    {
        public string Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
}

■ デザイナとして表示しない

 * [プロジェクト名].csprojの「<SubType>Form</SubType>」が削除されている可能性があるので、追加する
 * csprojファイルによって、ひとつのモジュールにコンパイルされるリソースをまとめて管理している

関連記事

Windows Formに関するトラブル

BindingSourceを利用することにより、意図していないのに同期してしまう
https://blogs.yahoo.co.jp/dk521123/22051015.html
画面のちらつき防止
https://blogs.yahoo.co.jp/dk521123/20497544.html