Создание окна средства с несколькими экземплярами
Вы можете запрограммировать окно инструментов, чтобы одновременно открыть несколько экземпляров. По умолчанию окна инструментов могут открывать только один экземпляр.
При использовании окна инструментов с несколькими экземплярами можно одновременно отображать несколько связанных источников информации. Например, можно поместить многострочный TextBox элемент управления в окно инструментов с несколькими экземплярами, чтобы несколько фрагментов кода одновременно были доступны во время сеанса программирования. Кроме того, можно поместить DataGrid элемент управления и раскрывающийся список в окне инструментов с несколькими экземплярами, чтобы одновременно отслеживать несколько источников данных в режиме реального времени.
Создание простого (одно экземпляра) окна инструментов
Создайте проект с именем MultiInstanceToolWindow с помощью шаблона VSIX и добавьте пользовательский шаблон элемента окна инструментов с именем 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 метод и задайте егоcreate
флагfalse
таким образом, чтобы он перебирал существующие экземпляры окна инструментов до тех пор, пока не будет найден.id
Чтобы создать экземпляр окна инструментов, вызовите FindToolWindow метод и задайте для нее
id
доступное значение и егоcreate
флагtrue
.По умолчанию значение
id
параметра FindToolWindow метода равно0
. Это значение делает окно средства с одним экземпляром. Для размещения нескольких экземпляров каждый экземпляр должен иметь собственный уникальныйid
.Show Вызовите метод для IVsWindowFrame объекта, возвращаемого свойством Frame экземпляра окна средства.
По умолчанию метод, созданный шаблоном элемента окна инструмента,
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; } } }