チュートリアル: カスタム Windows フォーム コントロールのデザイン時のデバッグ
カスタム コントロールを作成するとき、デザイン時の動作のデバッグが必要になることがよくあります。 これは、カスタム コントロール用のカスタム デザイナーを作成している場合に特に当てはまります。 詳細については、「チュートリアル: Visual Studio のデザイン時機能を活用した Windows フォーム コントロールの作成」を参照してください。
他の .NET Framework クラスをデバッグする場合と同様に、Visual Studio を使用してカスタム コントロールをデバッグできます。 違いは、カスタム コントロールのコードが実行されている Visual Studio の別のインスタンスをデバッグすることです。
プロジェクトの作成
最初にアプリケーションのプロジェクトを作成します。 このプロジェクトを使用して、カスタム コントロールをホストするアプリケーションをビルドします。
Visual Studio で Windows アプリケーション プロジェクトを作成し、DebuggingExample という名前を付けます。
コントロール ライブラリ プロジェクトを作成する
Windows コントロール ライブラリ プロジェクトをソリューションに追加します。
DebugControlLibrary プロジェクトに新しい UserControl 項目を追加します。 それを DebugControl という名前にします。
ソリューション エクスプローラーで、ベース名が UserControl1 のコード ファイルを削除して、プロジェクトの既定のコントロールを削除します。
ソリューションをビルドします。
Checkpoint
この時点で、ツールボックスにカスタム コントロールが表示されるようになります。
進行状況を確認するには、 [DebugControlLibrary コンポーネント] という名前の新しいタブを探し、クリックして選択します。 それが開くと、既定のアイコンと共にコントロールが DebugControl と表示されます。
カスタム コントロールにプロパティを追加する
カスタム コントロールのコードがデザイン時に実行されていることを確認するため、プロパティを追加し、そのプロパティを実装するコードにブレークポイントを設定します。
コード エディター で 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; } }
ソリューションをビルドします。
カスタム コントロールをホスト フォームに追加する
カスタム コントロールのデザイン時の動作をデバッグするには、カスタム コントロール クラスのインスタンスをホスト フォームに配置します。
"DebuggingExample" プロジェクトで、Form1 を Windows フォーム デザイナーで開きます。
ツールボックスで [DebugControlLibrary コンポーネント] タブを開き、DebugControl インスタンスをフォームにドラッグします。
[プロパティ] ウィンドウで
DemoString
カスタム プロパティを見つけます。 他のプロパティと同様に、その値を変更できることに注意してください。 また、DemoString
プロパティを選択すると、プロパティの説明文字列が [プロパティ] ウィンドウの下部に表示されることにも注意してください。
デザイン時デバッグ用にプロジェクトを設定する
カスタム コントロールのデザイン時の動作をデバッグするには、カスタム コントロールのコードが実行されている Visual Studio の別のインスタンスをデバッグします。
ソリューション エクスプローラーで DebugControlLibrary プロジェクトを右クリックし、 [プロパティ] を選択します。
DebugControlLibrary プロパティ シートで、 [デバッグ] タブを選択します。
[開始動作] セクションで [外部プログラムを起動する] を選択します。 Visual Studio の別のインスタンスをデバッグするので、省略記号 (
) ボタンをクリックして、Visual Studio IDE を参照します。 実行可能ファイルの名前は devenv.exe であり、既定の場所にインストールした場合、そのパスは %ProgramFiles(x86)%\Microsoft Visual Studio\2019\<>\Common7\IDE になります。
[OK] を選択してダイアログ ボックスを閉じます。
DebugControlLibrary プロジェクトを右クリックし、 [スタートアップ プロジェクトに設定] を選択して、このデバッグ構成を有効にします。
デザイン時にカスタム コントロールをデバッグする
これで、デザイン モードで実行しながらカスタム コントロールをデバッグする準備ができました。 デバッグ セッションを開始すると、Visual Studio の新しいインスタンスが作成されるので、それを使用して "DebuggingExample" ソリューションを読み込みます。 フォーム デザイナーで Form1 を開くと、カスタム コントロールのインスタンスが作成され、実行が開始されます。
コード エディターで DebugControl のソース ファイルを開き、
DemoString
プロパティのSet
アクセサーにブレークポイントを設定します。F5 キーを押してデバッグ セッションを開始します。 Visual Studio の新しいインスタンスが作成されます。 インスタンスは、次の 2 つの方法で区別できます。
デバッグ インスタンスのタイトル バーには、 [Running](実行中) という単語が表示されています
デバッグ インスタンスの [デバッグ] ツール バーの [開始] ボタンは無効になっています
ブレークポイントは、デバッグ インスタンスに設定されます。
Visual Studio の新しいインスタンスで、"DebuggingExample" ソリューションを開きます。 [ファイル] メニューの [最近使ったプロジェクト] を選択することで、ソリューションを簡単に見つけることができます。 "DebuggingExample.sln" ソリューション ファイルが、最近使用したファイルとして一覧に表示されます。
重要
.NET 5 (.NET Core 3.1) 以降の Windows フォーム プロジェクトをデバッグしている場合は、Visual Studio のこのインスタンスを使用して DesignToolsServer.exe プロセスにデバッガーをアタッチします。 [デバッグ]>[プロセスにアタッチ] メニュー項目を選択します。 プロセスの一覧から DesignToolsServer.exe を見つけ、 [アタッチ] をクリックします。
フォーム デザイナーで Form1 を開き、DebugControl コントロールを選択します。
DemoString
プロパティの値を変更します。 変更をコミットすると、Visual Studio のデバッグ インスタンスがフォーカスを取得し、ブレークポイントで実行が停止します。 他のコードと同じように、プロパティ アクセサーを 1 ステップずつ実行できます。デバッグを停止するには、Visual Studio のホストされたインスタンスを終了するか、デバッグ インスタンスで [デバッグの停止] ボタンを選択します。
次のステップ
これで、デザイン時にカスタム コントロールをデバッグできるようになりました。Visual Studio IDE とのコントロールの相互作用を拡張する多くの可能性があります。
Component クラスの DesignMode プロパティを使用すると、デザイン時にのみ実行されるコードを記述できます。 詳細については、「DesignMode」を参照してください。
複数の属性をコントロールのプロパティに適用し、カスタム コントロールとデザイナーの対話を操作できます。 これらの属性は System.ComponentModel 名前空間にあります。
カスタム コントロール用のカスタム デザイナーを作成できます。 これにより、Visual Studio によって公開される拡張可能なデザイナー インフラストラクチャを使用して、デザイン エクスペリエンスを完全に制御できます。 詳細については、「チュートリアル: Visual Studio のデザイン時機能を活用した Windows フォーム コントロールの作成」を参照してください。