チュートリアル: カスタム Windows フォーム コントロールのデザイン時のデバッグ

カスタム コントロールを作成するとき、デザイン時の動作のデバッグが必要になることがよくあります。 これは、カスタム コントロール用のカスタム デザイナーを作成している場合に特に当てはまります。 詳細については、「チュートリアル: Visual Studio のデザイン時機能を活用した Windows フォーム コントロールの作成」を参照してください。

他の .NET Framework クラスをデバッグする場合と同様に、Visual Studio を使用してカスタム コントロールをデバッグできます。 違いは、カスタム コントロールのコードが実行されている Visual Studio の別のインスタンスをデバッグすることです。

重要

この記事は、主に .NET Framework を使用した Windows フォーム用の従来のインプロセス デザイナーを対象としています。 これらの手順は、.NET (.NET Framework ではなく) を対象とするプロジェクトに対して直接適用できない、または完全な互換性がない可能性があります。

.NET Framework プロジェクトの場合、プラットフォーム ターゲット設定 Any または x64 でコンパイルできるプロジェクトのみが、デザイナーで完全にサポートされます。 ActiveX、COM、またはその他の 32 ビット コンポーネントを使用するプロジェクトでは、互換性の問題が生じるおそれがあります。 Out-Of_Process Framework デザイナーは、現在プレビュー段階にあり、これらの互換性の問題の多くに対処しています。 ただし、デザイン時の機能は、64 ビットのインプロセス デザイナーほどうまく動作しない場合があります。 Out-Of-Process Framework デザイナーを有効にするには、[ツール]>[オプション]>[環境]>[プレビュー機能] の順に移動します。

Out-Of-Process デザイナーの詳細については、.NET Framework 以降のデザイナーの変更に関する記事を参照してください。

プロジェクトの作成

最初にアプリケーションのプロジェクトを作成します。 このプロジェクトを使用して、カスタム コントロールをホストするアプリケーションをビルドします。

Visual Studio で Windows アプリケーション プロジェクトを作成し、DebuggingExample という名前を付けます。

コントロール ライブラリ プロジェクトを作成する

  1. Windows コントロール ライブラリ プロジェクトをソリューションに追加します。

  2. DebugControlLibrary プロジェクトに新しい UserControl 項目を追加します。 それを DebugControl という名前にします。

  3. ソリューション エクスプローラーで、ベース名が UserControl1 のコード ファイルを削除して、プロジェクトの既定のコントロールを削除します。

  4. ソリューションをビルドします。

Checkpoint

この時点で、ツールボックスにカスタム コントロールが表示されるようになります。

進行状況を確認するには、 [DebugControlLibrary コンポーネント] という名前の新しいタブを探し、クリックして選択します。 それが開くと、既定のアイコンと共にコントロールが DebugControl と表示されます。

カスタム コントロールにプロパティを追加する

カスタム コントロールのコードがデザイン時に実行されていることを確認するため、プロパティを追加し、そのプロパティを実装するコードにブレークポイントを設定します。

  1. コード エディターDebugControl を開きます。 クラスの定義に次のコードを追加します。

    Private demoStringValue As String = Nothing
    <BrowsableAttribute(true)>
    Public Property DemoString() As String
    
        Get
            Return Me.demoStringValue
        End Get
    
        Set(ByVal value As String)
            Me.demoStringValue = value
        End Set
    
    End Property
    
    private string demoStringValue = null;
    [Browsable(true)]
    public string DemoString
    {
        get
        {
            return this.demoStringValue;
        }
        set
        {
            demoStringValue = value;
        }
    }
    
  2. ソリューションをビルドします。

カスタム コントロールをホスト フォームに追加する

カスタム コントロールのデザイン時の動作をデバッグするには、カスタム コントロール クラスのインスタンスをホスト フォームに配置します。

  1. "DebuggingExample" プロジェクトで、Form1 を Windows フォーム デザイナーで開きます。

  2. ツールボックス[DebugControlLibrary コンポーネント] タブを開き、DebugControl インスタンスをフォームにドラッグします。

  3. [プロパティ] ウィンドウで DemoString カスタム プロパティを見つけます。 他のプロパティと同様に、その値を変更できることに注意してください。 また、DemoString プロパティを選択すると、プロパティの説明文字列が [プロパティ] ウィンドウの下部に表示されることにも注意してください。

デザイン時デバッグ用にプロジェクトを設定する

カスタム コントロールのデザイン時の動作をデバッグするには、カスタム コントロールのコードが実行されている Visual Studio の別のインスタンスをデバッグします。

  1. ソリューション エクスプローラーDebugControlLibrary プロジェクトを右クリックし、 [プロパティ] を選択します。

  2. DebugControlLibrary プロパティ シートで、 [デバッグ] タブを選択します。

    [開始動作] セクションで [外部プログラムを起動する] を選択します。 Visual Studio の別のインスタンスをデバッグするので、省略記号 (The Ellipsis button (...) in the Properties window of Visual Studio) ボタンをクリックして、Visual Studio IDE を参照します。 実行可能ファイルの名前は devenv.exe であり、既定の場所にインストールした場合、そのパスは %ProgramFiles(x86)%\Microsoft Visual Studio\2019\<>\Common7\IDE になります。

  3. [OK] を選択してダイアログ ボックスを閉じます。

  4. DebugControlLibrary プロジェクトを右クリックし、 [スタートアップ プロジェクトに設定] を選択して、このデバッグ構成を有効にします。

デザイン時にカスタム コントロールをデバッグする

これで、デザイン モードで実行しながらカスタム コントロールをデバッグする準備ができました。 デバッグ セッションを開始すると、Visual Studio の新しいインスタンスが作成されるので、それを使用して "DebuggingExample" ソリューションを読み込みます。 フォーム デザイナーで Form1 を開くと、カスタム コントロールのインスタンスが作成され、実行が開始されます。

  1. コード エディターDebugControl のソース ファイルを開き、DemoString プロパティの Set アクセサーにブレークポイントを設定します。

  2. F5 キーを押してデバッグ セッションを開始します。 Visual Studio の新しいインスタンスが作成されます。 インスタンスは、次の 2 つの方法で区別できます。

    • デバッグ インスタンスのタイトル バーには、 [Running](実行中) という単語が表示されています

    • デバッグ インスタンスの [デバッグ] ツール バーの [開始] ボタンは無効になっています

    ブレークポイントは、デバッグ インスタンスに設定されます。

  3. Visual Studio の新しいインスタンスで、"DebuggingExample" ソリューションを開きます。 [ファイル] メニューの [最近使ったプロジェクト] を選択することで、ソリューションを簡単に見つけることができます。 "DebuggingExample.sln" ソリューション ファイルが、最近使用したファイルとして一覧に表示されます。

    重要

    .NET 6 以降の Windows フォーム プロジェクトをデバッグしている場合は、プロジェクトを読み込まず、代わりに Visual Studio のこのインスタンスを使用して DesignToolsServer.exe プロセスにデバッガーをアタッチします。 [デバッグ]>[プロセスにアタッチ] メニュー項目を選択します。 プロセスの一覧から DesignToolsServer.exe を見つけ、 [アタッチ] をクリックします。 詳細については、.NET Framework 以降のデザイナーの変更に関する記事を参照してください。

  4. フォーム デザイナーで Form1 を開き、DebugControl コントロールを選択します。

  5. DemoString プロパティの値を変更します。 変更をコミットすると、Visual Studio のデバッグ インスタンスがフォーカスを取得し、ブレークポイントで実行が停止します。 他のコードと同じように、プロパティ アクセサーを 1 ステップずつ実行できます。

  6. デバッグを停止するには、Visual Studio のホストされたインスタンスを終了するか、デバッグ インスタンスで [デバッグの停止] ボタンを選択します。

次のステップ

これで、デザイン時にカスタム コントロールをデバッグできるようになりました。Visual Studio IDE とのコントロールの相互作用を拡張する多くの可能性があります。

  • Component クラスの DesignMode プロパティを使用すると、デザイン時にのみ実行されるコードを記述できます。 詳細については、「DesignMode」を参照してください。

  • 複数の属性をコントロールのプロパティに適用し、カスタム コントロールとデザイナーの対話を操作できます。 これらの属性は System.ComponentModel 名前空間にあります。

  • カスタム コントロール用のカスタム デザイナーを作成できます。 これにより、Visual Studio によって公開される拡張可能なデザイナー インフラストラクチャを使用して、デザイン エクスペリエンスを完全に制御できます。 詳細については、「チュートリアル: Visual Studio のデザイン時機能を活用した Windows フォーム コントロールの作成」を参照してください。

関連項目