다중 인스턴스 도구 창 만들기
여러 인스턴스를 동시에 열 수 있도록 도구 창을 프로그래밍할 수 있습니다. 기본적으로 도구 창은 하나의 인스턴스만 열려 있을 수 있습니다.
다중 인스턴스 도구 창을 사용하는 경우 여러 관련 정보 원본을 동시에 표시할 수 있습니다. 예를 들어 프로그래밍 세션 중에 여러 코드 조각을 동시에 사용할 수 있도록 다중 인스턴스 도구 창에 여러 줄 TextBox 컨트롤을 배치할 수 있습니다. 또한 예를 들어 여러 실시간 데이터 원본을 동시에 추적할 수 있도록 다중 인스턴스 도구 창에 DataGrid 컨트롤 및 드롭다운 목록 상자를 배치할 수 있습니다.
기본(단일 인스턴스) 도구 창 만들기
VSIX 템플릿을 사용하여 MultiInstanceToolWindow라는 프로젝트를 만들고 MIToolWindow라는 사용자 지정 도구 창 항목 템플릿을 추가합니다.
참고 항목
도구 창을 사용하여 확장을 만드는 방법에 대한 자세한 정보는 도구 창을 사용하여 확장 만들기를 참조하세요.
도구 창을 다중 인스턴스로 만들기
MIToolWindowPackage.cs 파일을 열고
ProvideToolWindow
특성을 찾습니다. 다음 예제와 같이MultiInstances=true
매개 변수를 추가합니다.[PackageRegistration(UseManagedResourcesOnly = true)] [InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)] // Info on this package for Help/About [ProvideMenuResource("Menus.ctmenu", 1)] [ProvideToolWindow(typeof(MultiInstanceToolWindow.MIToolWindow), MultiInstances = true)] [Guid(MIToolWindowPackage.PackageGuidString)] public sealed class MIToolWindowPackage : Package {. . .}
MIToolWindowCommand.cs 파일에서
ShowToolWindos()
메서드를 찾습니다. 이 메서드에서 FindToolWindow 메서드를 호출하고 사용 가능한id
가 발견될 때까지 기존 도구 창 인스턴스를 반복하도록 해당create
플래그를false
로 설정합니다.도구 창 인스턴스를 만들려면 FindToolWindow 메서드를 호출하고
id
를 사용 가능한 값으로,create
플래그를true
로 설정합니다.기본적으로 FindToolWindow 메서드의
id
매개 변수는 값이0
입니다. 이 값은 단일 인스턴스 도구 창을 만듭니다. 둘 이상의 인스턴스를 호스트하려면 모든 인스턴스에 고유한id
가 있어야 합니다.도구 창 인스턴스의 Frame 속성에서 반환되는 IVsWindowFrame 개체에서 Show 메서드를 호출합니다.
기본적으로 도구 창 항목 템플릿에서 만든
ShowToolWindow
메서드는 단일 인스턴스 도구 창을 만듭니다. 다음 예제에서는 여러 인스턴스를 만들도록ShowToolWindow
메서드를 수정하는 방법을 보여 줍니다.private void ShowToolWindow(object sender, EventArgs e) { for (int i = 0; i < 10; i++) { ToolWindowPane window = this.package.FindToolWindow(typeof(MIToolWindow), i, false); if (window == null) { // Create the window with the first free ID. window = (ToolWindowPane)this.package.FindToolWindow(typeof(MIToolWindow), i, true); if ((null == window) || (null == window.Frame)) { throw new NotSupportedException("Cannot create tool window"); } IVsWindowFrame windowFrame = (IVsWindowFrame)window.Frame; Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(windowFrame.Show()); break; } } }