Criar uma janela de ferramenta de várias instâncias
Você pode programar uma janela de ferramenta para que várias instâncias dela possam ser abertas simultaneamente. Por padrão, as janelas de ferramentas podem ter apenas uma instância aberta.
Ao usar uma janela de ferramenta de várias instâncias, você pode mostrar várias fontes de informações relacionadas ao mesmo tempo. Por exemplo, você pode colocar um controle de várias linhas TextBox em uma janela de ferramenta de várias instâncias para que vários trechos de código estejam disponíveis simultaneamente durante uma sessão de programação. Além disso, por exemplo, você pode colocar um DataGrid controle e uma caixa de listagem suspensa em uma janela de ferramenta de várias instâncias para que várias fontes de dados em tempo real possam ser rastreadas simultaneamente.
Criar uma janela de ferramenta básica (instância única)
Crie um projeto chamado MultiInstanceToolWindow usando o modelo VSIX e adicione um modelo de item de janela de ferramenta personalizado chamado MIToolWindow.
Observação
Para obter mais informações sobre como criar uma extensão com uma janela de ferramenta, consulte Criar uma extensão com uma janela de ferramenta.
Criar uma janela de ferramenta em várias instâncias
Abra o arquivo MIToolWindowPackage.cs e localize o
ProvideToolWindow
atributo. e oMultiInstances=true
parâmetro, conforme mostrado no exemplo a seguir:[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 {. . .}
No arquivo MIToolWindowCommand.cs localize, localize o
ShowToolWindos()
método. Nesse método, chame o método e defina seucreate
sinalizador parafalse
que ele itere FindToolWindow pelas instâncias existentes da janela de ferramenta até que um disponívelid
seja encontrado.Para criar uma instância de janela de ferramenta, chame o método e defina-o FindToolWindow
id
como um valor disponível e seucreate
sinalizador comotrue
.Por padrão, o valor do parâmetro do
id
FindToolWindow método é0
. Esse valor cria uma janela de ferramenta de instância única. Para que mais de uma instância seja hospedada, cada instância deve ter seu próprioid
arquivo exclusivo .Chame o Show IVsWindowFrame método no objeto retornado pela Frame propriedade da instância da janela de ferramenta.
Por padrão, o
ShowToolWindow
método criado pelo modelo de item de janela de ferramenta cria uma janela de ferramenta de instância única. O exemplo a seguir mostra como modificar oShowToolWindow
método para criar várias instâncias.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; } } }