方法 : ツール ウィンドウを作成および制御する
Visual Studio のウィンドウは、ドキュメント ウィンドウとツール ウィンドウの 2 種類に分類されます。 ドキュメント ウィンドウは、コード エディターで編集できるコンテンツ (テキスト ファイル、HTML、クラス内のコードなど) を表示するウィンドウです。 ツール ウィンドウには、ボタン、テキスト、コンボ ボックスなど、1 つ以上のコントロールが表示されます。 Visual Studio 統合開発環境 (IDE: Integrated Development Environment) では、コントロールを使用して、オプションの設定、エラーの表示、プロジェクト要素の編集などの作業を行います。 これらの例として、出力ウィンドウ、タスク一覧、およびツールボックスがあります。 ツールボックスは、IDE 内で自由に移動したり、他のツール ウィンドウとドッキングしたりできます。また、LinkedWindows コレクションを使用すると、IDE のツール ウィンドウのリンクおよびリンク解除をプログラムによって行うことができます。 詳細については、「方法 : ウィンドウの特性を変更する」を参照してください。
オートメーションを使用して既存のツール ウィンドウを操作する以外に、Windows2 コレクションの CreateToolWindow2 メソッドを使用して独自のカスタム ツール ウィンドウを作成することもできます。
独自のカスタム ツール ウィンドウを作成すると、タスクの実行に役立つコントロールをそのウィンドウに設定できます。 たとえば、カスタム ツール ウィンドウを使用して、コードの書式設定に役立つ特殊なツールの表示、変数設定の追跡と変更、または高度なデバッグ タスクやソースのプロファイルの実行を行うことができます。
カスタム ツール ウィンドウを作成する手順は次のとおりです。
(Windows コントロール ライブラリ プロジェクトを使用して) ユーザー コントロールを作成します。
フォームおよびコードに必要なコントロール (ボタン、テキスト ボックスなど) を追加します。
プロジェクトを DLL にコンパイルします。
新しい Visual Studio アドイン プロジェクト (または、Windows アプリケーション プロジェクトなどの他のプロジェクト) を作成します。
CreateToolWindow2 メソッドを使用し、新しいユーザー コントロールをホストするツール ウィンドウを作成します。
CreateToolWindow2 を呼び出して新しいツール ウィンドウを作成する前に、アドインと同じアセンブリにユーザー コントロール (ControlObject) を移動するか、ユーザー コントロールのすべての属性を設定して COM から参照できるようにする必要があります。 たとえば、プロジェクトのコンパイル オプションで [COM の相互運用機能に登録] チェック ボックスをオンにします。 これを行わないと、コントロールが正しくマーシャリングされず、CreateToolWindow2 は null 値を返します。
次の例のほか、各言語のツール ウィンドウのサンプルおよびその他のコード例が、「Automation Samples for Visual Studio」にあります。
注意
新しいツール ウィンドウを表示する前に、そのツール ウィンドウの表示状態 (高さ、幅、位置など) を設定しようとすると、エラーが発生します。 このようなプロパティを設定する前にウィンドウが表示されていることを確認してください。
注意
実際に画面に表示されるダイアログ ボックスとメニュー コマンドは、アクティブな設定またはエディションによっては、ヘルプの説明と異なる場合があります。 ここに記載されている手順は、全般的な開発設定が適用されているものとして記述されています。 設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。 詳細については、「設定の操作」を参照してください。
カスタム ツール ウィンドウの作成
Visual Basic および Visual C# でツール ウィンドウを作成する方法を次の例に示します。
注意
次のコードはアドインで実行する必要があります。マクロでは実行できません。
カスタム ツール ウィンドウを作成するには
Windows コントロール ライブラリ プロジェクトでユーザー コントロールを作成します。 既定の名前 "WindowsControlLibrary1" を使用するか、次のコード内の asmPath パラメーターの名前を Windows コントロール ライブラリ プロジェクトの名前に一致するように変更します。
または、コード内で、既存のユーザー コントロールを参照できます。
注意
ユーザー コントロール クラスでは、System.Runtime.InteropServices.GuidAttribute がクラス定義に割り当てられている必要があります。
新しいアドイン プロジェクトを作成します。
詳細については、「方法 : アドインを作成する」を参照してください。
アドインの OnConnection メソッドを次のように置き換えます。
Public Sub OnConnection(ByVal application As Object, ByVal _ connectMode As ext_ConnectMode, ByVal addInInst As Object, _ ByRef custom As Array) Implements IDTExtensibility2.OnConnection Try ' ctlProgID - the ProgID for your user control. ' asmPath - the path to your user control DLL. ' guidStr - a unique GUID for the user control. Dim ctlProgID, asmPath, guidStr As String ' Variables for the new tool window that will hold ' your user control. Dim toolWins As EnvDTE80.Windows2 Dim toolWin As EnvDTE.Window Dim objTemp As Object = Nothing _applicationObject = CType(application, DTE2) _addInInstance = CType(addInInst, AddIn) ctlProgID = "WindowsControlLibrary2.UserControl1" ' Replace the <Path to VS Project> with the path to ' the folder where you created the WindowsCotrolLibrary. ' Remove the line returns from the path before ' running the add-in. asmPath = "<Path to VS Project>\My _ Documents\Visual Studio 2005\Projects\ _ WindowsControlLibrary2\WindowsControlLibrary2\_ bin\Debug\WindowsControlLibrary2.dll" guidStr = "{E9C60F2B-F01B-4e3e-A551-C09C62E5F584}" toolWins = CType(_applicationObject.Windows, Windows2) ' Create the new tool window, adding your user control. toolWin = toolWins.CreateToolWindow2(_addInInstance, _ asmPath, ctlProgID, "MyNewToolwindow", guidStr, objTemp) ' The tool window must be visible before you do anything ' with it, or you will get an error. If Not toolWins Is Nothing Then toolWin.Visible = True End If ' Uncomment the code below to set the new tool window's ' height and width, and to close it. ' MsgBox("Setting the height to 500 and width to 400...") ' toolWin.Height = 500 ' toolWin.Width = 400 ' MsgBox("Closing the tool window...") ' toolWin.Close(vsSaveChanges.vsSaveChangesNo) Catch ex As Exception MsgBox("Exception: " & ex.ToString) End Try End Sub
// Before running, add a reference to System.Windows.Forms, // using System.Windows.Forms, to the top of the class. public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) { try { // ctlProgID - the ProgID for your user control. // asmPath - the path to your user control DLL. // guidStr - a unique GUID for the user control. string ctlProgID, asmPath, guidStr; // Variables for the new tool window that will hold // your user control. EnvDTE80.Windows2 toolWins; EnvDTE.Window toolWin; object objTemp = null; _applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; ctlProgID = "WindowsControlLibrary2.UserControl1"; // Replace the <Path to VS Project> with the path to // the folder where you created the WindowsCotrolLibrary. // Remove the line returns from the path before // running the add-in. asmPath = @"c:\My Documents\Visual Studio 2005\Projects\ WindowsControlLibrary2\WindowsControlLibrary2\bin\ Debug\WindowsControlLibrary2.dll"; guidStr = "{E9C60F2B-F01B-4e3e-A551-C09C62E5F584}"; toolWins = (Windows2)_applicationObject.Windows; // Create the new tool window, adding your user control. toolWin = toolWins.CreateToolWindow2(_addInInstance, asmPath, ctlProgID, "MyNewToolwindow", guidStr, ref objTemp); // The tool window must be visible before you do anything // with it, or you will get an error. if (toolWins != null) { toolWin.Visible = true; } // Set the new tool window's height and width, // and then close it. System.Windows.Forms.MessageBox.Show("Setting the height to 500 and width to 400..."); toolWin.Height = 500; toolWin.Width = 400; System.Windows.Forms.MessageBox.Show ("Closing the tool window..."); toolWin.Close(vsSaveChanges.vsSaveChangesNo); } catch (Exception ex) { System.Windows.Forms.MessageBox.Show("Exception: " + ex.Message); } }
メモ 前のコードでは、System.Windows.Forms 名前空間への参照が必要です。
ユーザー コントロールを反映するように、ctlProgID、asmPath および guidStr の各変数の値を変更します。
プロジェクトをビルドして実行します。
[ツール] メニューの [アドイン マネージャー] をクリックし、アドインをアクティブにします。
新しいツール ウィンドウがフローティング状態で IDE に表示されます。 このツール ウィンドウは自由に移動したり、他のツール ウィンドウとドッキングしたりできます。