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

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

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

プロジェクトの作成

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

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 の別のインスタンスをデバッグするので、省略記号 (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 5 (.NET Core 3.1) 以降の Windows フォーム プロジェクトをデバッグしている場合は、Visual Studio のこのインスタンスを使用して DesignToolsServer.exe プロセスにデバッガーをアタッチします。 [デバッグ]>[プロセスにアタッチ] メニュー項目を選択します。 プロセスの一覧から DesignToolsServer.exe を見つけ、 [アタッチ] をクリックします。

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

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

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

次のステップ

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

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

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

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

関連項目