Cómo: Crear y controlar ventanas de herramientas

Actualización: noviembre 2007

En Visual Studio las ventanas se clasifican en dos categorías: ventanas de documento o ventanas de herramientas. Una ventana de documento es una ventana cuyo contenido se puede modificar a través del editor de código, como un archivo de texto, HTML o código en una clase. Una ventana de herramientas contiene uno o más controles, como botones, texto, cuadros combinados, etc. En el entorno de desarrollo integrado (IDE) de Visual Studio se utilizan controles para realizar tareas como establecer opciones, ver errores o editar elementos de proyectos. Algunos ejemplos son la ventana Resultados, la Lista de tareas y el Cuadro de herramientas. El Cuadro de herramientas se puede desplazar libremente en el IDE o acoplar con otras ventanas de herramientas, y se puede usar la colección LinkedWindows para vincular o desvincular mediante programación las ventanas de herramientas en el IDE. Para obtener más información, vea Cómo: Cambiar las características de las ventanas.

Además de utilizar la automatización para manipular las ventanas de herramientas existentes, también puede crear sus propias ventanas de herramientas mediante el método CreateToolWindow2 de la colección Windows2.

Nota:

Este nuevo método de Visual Studio 2005 reemplaza al método CreateToolWindow utilizado en Visual Studio 2002 y Visual Studio 2003.

Al crear su propia ventana de herramientas personalizada, puede rellenarla de controles útiles para la ejecución de las tareas. Puede, por ejemplo, utilizar una ventana de herramientas personalizada para mostrar herramientas especiales destinadas a dar formato al código, efectuar un seguimiento de las configuraciones de variables y modificarlas o realizar tareas de depuración avanzadas o análisis de origen.

El procedimiento para crear una ventana de herramientas personalizada consiste en:

  • Crear un control de usuario (mediante un proyecto de la Biblioteca de controles de Windows).

  • Agregar código y controles concretos a un formulario (botones, cuadros de texto, etc.).

  • Compilar el proyecto en un archivo DLL.

  • Crear un proyecto de complemento (u otro proyecto, como un proyecto de aplicación para Windows) de Visual Studio.

  • Usar el método CreateToolWindow2 para crear una ventana de herramientas destinada a alojar el nuevo control User.

Antes de invocar CreateToolWindow2 para crear una ventana de herramientas nueva, desplace el control User (ControlObject) al mismo ensamblado que el complemento o establezca todos los atributos de dicho control de forma que sea totalmente visible para COM. (Por ejemplo, seleccione la opción Registrar para interoperabilidad COM en las opciones de compilación del proyecto.) Si no hace esto, el control no calculará correctamente las referencias y CreateToolWindow2 devolverá un valor nulo.

Además de los ejemplos siguientes, puede encontrar otros ejemplos de ventanas de herramientas para cada lenguaje, al igual que otros ejemplos de código, en el sitio Web Automation Samples for Visual Studio (en inglés).

Nota:

Si intenta establecer cualquiera de los estados de visibilidad de la nueva ventana de herramientas (como alto, ancho o posición) antes de que se vea la ventana de herramientas, obtendrá un error. Asegúrese de que la ventana se ve antes de intentar establecer propiedades de ese tipo.

Nota:

Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valores de configuración o de edición activos. Estos procedimientos se desarrollaron con la Configuración general de desarrollo activa. Para cambiar la configuración, elija la opción Importar y exportarconfiguraciones del menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Crear una ventana de herramientas personalizada

En el ejemplo siguiente se muestra cómo crear una ventana de herramientas en Visual Basic y Visual C#.

Nota:

El código siguiente se debe ejecutar en un complemento; no se puede ejecutar en una macro.

Para crear una ventana de herramientas personalizada

  1. Cree un control de usuario en un proyecto de Biblioteca de controles de Windows. Acepte el nombre predeterminado "WindowsControlLibrary1" o asegúrese de cambiar el nombre del parámetro asmPath en el código siguiente para que coincida con el nombre del proyecto de la Biblioteca de controles de Windows.

    O bien, también puede hacer referencia a un control de usuario existente en el código.

  2. Cree un nuevo proyecto de complemento.

    Para obtener más información, vea Cómo: Crear un complemento.

  3. Reemplace el método OnConnection del complemento por lo siguiente:

    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;
            }
            // Uncomment the code below to set the new tool window's
            // height and width, and to 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);
        }
    }
    
  4. Genere y ejecute el proyecto.

  5. En el menú Herramientas, haga clic en Administrador de complementos para activar el complemento.

Verá que la nueva ventana de herramientas flota en el IDE. Puede moverla en cualquier dirección o acoplarla con otras ventanas de herramientas.

Vea también

Tareas

Cómo: Cambiar las características de las ventanas

Cómo: Crear un complemento

Tutorial: Crear un asistente

Conceptos

Controlar la configuración de opciones

Gráfico del modelo de objetos de automatización

Otros recursos

Crear y controlar las ventanas del entorno

Crear complementos y asistentes

Referencia de automatización y extensibilidad