Compartilhar via


Como criar e controlar janelas de ferramentas

Os suplementos do Visual Studio foram preteridos no Visual Studio 2013. Você deve atualizar seus suplementos para as extensões VSPackage. Para obter mais informações sobre a atualização, consulte Perguntas frequentes: convertendo suplementos em extensões VSPackage.

As janelas no Visual Studio entram em uma das duas categorias: janelas de documentos ou janelas de ferramentas. Uma janela de documentos é aquela cujo conteúdo é editável pelo Editor de Códigos, como um arquivo de texto, HTML ou o código dentro de uma classe. Uma janela de ferramentas contém um ou mais controles, como botões, texto, caixas de combinação e assim por diante. O IDE (Ambiente de Desenvolvimento Integrado) do Visual Studio usa controles para realizar tarefas como opções de configuração, exibição de erros ou edição de elementos do projeto. Alguns exemplos são a janela de Saída, a Lista de Tarefas e a Caixa de Ferramentas. A Caixa de Ferramentas pode ser movida livremente pelo IDE ou encaixada entre outras janelas de ferramentas, e você pode usar a coleção LinkedWindows para vincular ou desvincular programaticamente janelas de ferramentas no IDE. Para obter mais informações, consulte Como alterar características da janela.

Além de usar automação para manipular as janelas de ferramentas existentes, você também pode criar suas próprias janelas de ferramentas personalizadas usando o método CreateToolWindow2 da coleção Windows2.

Ao criar sua própria janela de ferramentas personalizada, você pode preenchê-la com controles úteis para realizar tarefas. Você pode, por exemplo, usar uma janela de ferramentas personalizada para exibir ferramentas especializadas para ajudá-lo a formatar seu código, acompanhar e alterar configurações de variáveis ou realizar tarefas avançadas de depuração ou de perfis de origem.

O procedimento para criar uma janela de ferramentas personalizada é:

  • Criar um controle de usuário (usando um projeto da Biblioteca de Controles do Windows)

  • Adicionar controles desejados em um formulário (botões, caixas de texto e assim por diante) e código.

  • Compilar o projeto em uma DLL.

  • Criar um novo projeto de suplemento do Visual Studio (ou outro projeto, como um projeto de aplicativo do Windows).

  • Use o método CreateToolWindow2 para criar uma janela de ferramentas para hospedar o novo controle do usuário.

Antes de chamar CreateToolWindow2 para criar uma nova janela de ferramentas, você deve mover o controle do usuário (ControlObject) para o mesmo assembly do suplemento ou definir todos os atributos no controle do usuário para torná-lo totalmente visível ao COM. (Por exemplo, verificando a opção Registrar para interoperabilidade com o COM nas opções de compilação do projeto.) Se você não fizer isso, o controle não preparará corretamente e CreateToolWindow2 retornará um valor nulo.

Além dos exemplos abaixo, exemplos adicionais de janela de ferramentas para cada idioma, bem como outros exemplos de código, estão no site Exemplos de automação para Visual Studio.

Dica

Se você tentar definir qualquer um dos estados de visibilidade da nova janela de ferramenta, tal como altura, largura ou posição, antes que a janela de ferramenta esteja visível, você obterá um erro.Certifique-se de que a janela esteja visível antes de tentar definir essas propriedades.

Dica

As caixas de diálogo e os comandos de menu que você vê podem ser diferentes dos descritos na Ajuda, dependendo da sua edição ou das configurações ativas.Esses procedimentos foram desenvolvidos com as Configurações Gerais de Desenvolvimento ativas.Para alterar as configurações, escolha Importar e ExportarConfigurações no menu Ferramentas.Para obter mais informações, consulte Personalizando configurações de desenvolvimento no Visual Studio.

Criando uma janela de ferramentas personalizada

O exemplo a seguir demonstra como criar uma janela de ferramentas no Visual Basic e no Visual C#.

Dica

O código a seguir deve ser executado em um suplemento. Não execute-o em uma macro.

Para criar uma janela de ferramentas personalizada

  • Crie um controle de usuário em um projeto da Biblioteca de Controles do Windows. Aceite o nome padrão de "WindowsControlLibrary1" ou altere o nome do parâmetro asmPath no código abaixo para corresponder ao nome do seu projeto na Biblioteca de Controles do Windows.

    Como alternativa, em seu código, você pode se referir a um controle de usuário existente.

Dica

Sua classe de controle de usuário deve ter um GuidAttribute anexado à definição de classe.

  1. Crie um novo projeto de suplemento.

    Para obter informações, consulte Como criar um suplemento.

  2. Substitua o método OnConnection do suplemento pelo seguinte:

    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 2013\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 toolWin 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 2013\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 (toolWin != 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);
        }
    }
    

    Observação   O código anterior requer uma referência ao namespace System.Windows.Forms.

  3. Altere os valores das variáveis ctlProgID, asmPath e guidStr para refletir seu controle de usuário.

  4. Compile e execute o projeto.

  5. No menu Ferramentas, clique em Gerenciador de Suplementos para ativar o suplemento.

Você vê sua nova janela de ferramentas flutuando no IDE. Você pode movê-la para qualquer lugar que desejar ou encaixá-la entre outras janelas de ferramentas.

Consulte também

Tarefas

Como alterar características da janela

Como criar um suplemento

Instruções passo a passo: criando um assistente

Conceitos

Controlando configurações de Opções

Gráfico do modelo de objetos automation

Outros recursos

Criando e controlando janelas de ambiente

Criando suplementos e assistentes

Referência sobre automação e extensibilidade