ビュー デザイナー (View Designer) / デザイナー (Designer)

操作対象ごとに、

  • Windows フォーム デザイナー
  • Web フォーム デザイナー
  • XAML デザイナー

などがあります。

生成されるコード

Windows フォーム

コードの記述順

#region Windows フォーム デザイナーで生成されたコード」範囲内のコードは、コントロールを追加した順に記述されます。これを変更するには、コントロールがnewで生成される順を書き換えます。そしてデザイナーで何らかの変更を加えて更新すると、それ以下のプロパティの設定部の順もそれに合うように並べ替えられます。

#endregion」以下のフィールド宣言部もコントロールの追加順に記述されますが、これの記述順を書き換えてもデザイナの影響は受けません。

コントロールのロック

コントロールをロックしておくことで、意図しない位置や大きさの変更を防止できます。.NET TIPS Windowsフォーム上のコントロールの位置やサイズを固定するには? - C# VB.NET - @IT 一色政彦 (2005/03/11)

これはメニューの【書式 → コントロールのロック】から設定できます。

トラブル対処法

アセンブリが見つからない

ビュー デザイナーを開いたときに「型 'ClassName' が見つかりませんでした。 この型を含むアセンブリが参照されていることを確認してください。 この型が開発プロジェクトの一部である場合は、現在のプラットフォームまたは Any CPU の設定を使用して、プロジェクトが正常にビルドされていることを確認してください。 」としてデザイナの表示に失敗することがあります。

このときソリューションのプラットフォームをx64としているならば、これをAny CPUやx86に変更して再試行します。Visual Studioは64ビットのアセンブリを読み込めないようで、プロジェクトが正常にビルドでされていてもこの問題は発生します。.net - Could not find type 'xxx.xxx.xxx'. Please make sure that the assembly - Stack Overflow

ツールボックスからの読み込みに失敗する

ツールボックスからアイテムを追加したときに「ツールボックス アイテム 'Item' の読み込みに失敗しました。アイテムはツールボックスから削除されます。」として失敗することがあります。このときソリューションのプラットフォームをx64としているならば、これをAny CPUやx86に変更して再試行します。

abstractとして宣言されているため、作成できない

デザイナーは型 'ClassName' のインスタンスを作成しなければなりませんが、型が abstract として宣言されているため、作成できませんでした。

仕様です。abstractを外すか、デザイナで開くことをあきらめます。デザイナーは型 '<type name>' のインスタンスを作成しなければなりませんが、型が abstract として宣言されているため、作成できませんでした - Windows フォーム デザイナーでのデザイン時エラー | Microsoft Learn

意図せずコードが追加される

コントロールを継承したクラスでプロパティの既定値を書き替えていると、それを利用するコントロールをデザイナーで開いたときに、そこでもプロパティが設定されます。これは継承したクラスのプロパティに、

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public override string Text
{ ... }

のように属性を指定することで、コードの生成を抑制できます。c# winform : override default properties in designer from custom control - Stack Overflow DesignerSerializationVisibilityAttribute クラス (System.ComponentModel) | Microsoft Learn

列挙子 内容
Hidden オブジェクトのコードは生成されない
Visible オブジェクトのコードは生成される
Content オブジェクト自体のコードではなく、オブジェクトの内容のコードが生成される
DesignerSerializationVisibility 列挙型 (System.ComponentModel) | Microsoft Learn

一方でそれがデザイン時には不要な処理に起因するものならば、そのときには処理されないようにコードで分岐させます。 c# - Detecting design mode from a Control's constructor - Stack Overflow LicenseUsageMode Enum (System.ComponentModel) | Microsoft Learn

if (Process.GetCurrentProcess().ProcessName != "devenv")
{
    // デザイン モードでは不要な処理
}

または、

if (LicenseManager.UsageMode == LicenseUsageMode.Designtime)
{
    // デザイン モードでは不要な処理
}

のようにします。

Microsoft Learnから検索