Condividi tramite


Procedura: creare e controllare finestre degli strumenti

In Visual Studio le finestre sono suddivise in due categorie: finestre di documento e finestre degli strumenti.Il contenuto di una finestra di documento, ad esempio file di testo, HTML o codice all'interno di una classe, può essere modificato tramite l'editor di codice.Una finestra degli strumenti contiene invece uno o più controlli, ad esempio pulsanti, testo, caselle combinate e così via.L'ambiente di sviluppo integrato (IDE) di Visual Studio utilizza i controlli per eseguire attività quali l'impostazione di opzioni, la visualizzazione di errori o la modifica di elementi di progetto.Alcuni esempi sono la finestra di output, l'elenco attività e la Casella degli strumenti.La Casella degli strumenti può essere spostata liberamente nell'IDE o ancorata ad altre finestre degli strumenti ed è possibile utilizzare la raccolta LinkedWindows per collegare o scollegare a livello di codice le finestre degli strumenti nell'IDE.Per ulteriori informazioni, vedere Procedura: modificare le caratteristiche delle finestre.

Oltre a utilizzare l'automazione per modificare finestre degli strumenti esistenti, è possibile creare finestre degli strumenti personalizzate utilizzando il metodo CreateToolWindow2 della raccolta Windows2.

Nelle finestre degli strumenti personalizzate è possibile inserire controlli per eseguire le attività desiderate.È ad esempio possibile utilizzare una finestra degli strumenti personalizzata per visualizzare strumenti specifici per formattare il codice, tenere traccia e modificare le impostazioni delle variabili oppure eseguire attività di debug o di analisi del codice tramite il profiler.

Procedura per la creazione di una finestra degli strumenti personalizzata:

  • Creare un controllo utente (utilizzando un progetto della Libreria di controlli Windows)

  • Aggiungere i controlli desiderati in un form (pulsanti, caselle di testo e così via) e il codice

  • Compilare il progetto in una DLL.

  • Creare un nuovo progetto di componente aggiuntivo di Visual Studio o un progetto di altro tipo, ad esempio un progetto Applicazione Windows.

  • Utilizzare il metodo CreateToolWindow2 per creare una finestra degli strumenti che contenga il nuovo controllo utente.

Prima di richiamare il metodo CreateToolWindow2 per creare una nuova finestra degli strumenti, è opportuno spostare il controllo utente (ControlObject) nello stesso assembly in cui si trova il componente aggiuntivo oppure impostare tutti gli attributi sul controllo utente per renderlo completamente visibile a COM.A questo scopo, ad esempio, è possibile selezionare l'opzione Registra per interoperabilità COM nelle opzioni di compilazione del progetto. Se non si procede in questo modo, il controllo non eseguirà correttamente il marshalling e il metodo CreateToolWindow2 restituirà un valore null.

Oltre agli esempi riportati di seguito, sono disponibili esempi aggiuntivi di finestre degli strumenti per ogni linguaggio e altri esempi di codice sul sito Web Automation Samples for Visual Studio (informazione in lingua inglese).

[!NOTA]

Se si cerca di impostare uno degli stati di visibilità della nuova finestra degli strumenti, ovvero altezza, larghezza o posizione, prima che la finestra degli strumenti sia visibile, si verificherà un errore.Assicurarsi che la finestra sia visibile prima di tentare di impostare queste proprietà.

[!NOTA]

È possibile che le finestre di dialogo e i comandi di menu visualizzati siano diversi da quelli descritti nella Guida a seconda delle impostazioni attive o dell'edizione del programma.Queste procedure sono state sviluppate con le Impostazioni generali per lo sviluppo attive.Per modificare le impostazioni, scegliere Importa/EsportaImpostazioni dal menu Strumenti.Per ulteriori informazioni, vedere Impostazioni di Visual Studio.

Creazione di una finestra degli strumenti personalizzata

Nell'esempio riportato di seguito viene illustrato come creare una finestra degli strumenti in Visual Basic e Visual C#.

[!NOTA]

Il codice riportato di seguito deve essere eseguito in un componente aggiuntivo, non in una macro.

Per creare una finestra degli strumenti personalizzata

  • Creare un controllo utente in un progetto della Libreria di controlli Windows. Accettare il nome predefinito "WindowsControlLibrary1" oppure assicurarsi di cambiare il nome del parametro asmPath nel codice riportato di seguito affinché corrisponda al nome del progetto della Libreria di controlli Windows.

    In alternativa, all'interno del codice, è possibile fare riferimento a un controllo utente esistente.

[!NOTA]

La classe del controllo utente deve disporre di un elemento System.Runtime.InteropServices.GuidAttribute associato alla definizione di classe.

  1. Creare un nuovo progetto di componente aggiuntivo.

    Per ulteriori informazioni, vedere Procedura: creare un componente aggiuntivo.

  2. Sostituire il metodo OnConnection del componente aggiuntivo con quanto riportato di seguito:

    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 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 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 (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);
        }
    }
    

    Nota   Il codice precedente richiede un riferimento allo spazio dei nomi System.Windows.Forms.

  3. Modificare i valori delle variabili ctlProgID, asmPath e guidStr per riflettere il controllo utente.

  4. Compilare ed eseguire il progetto.

  5. Scegliere Gestione componenti aggiuntivi dal menu Strumenti per attivare il componente aggiuntivo.

La nuova finestra degli strumenti verrà visualizzata nell'IDE.Sarà possibile spostarla in qualsiasi posizione oppure ancorarla ad altre finestre degli strumenti.

Vedere anche

Attività

Procedura: modificare le caratteristiche delle finestre

Procedura: creare un componente aggiuntivo

Procedura dettagliata: creazione di una procedura guidata

Concetti

Controllo delle impostazioni relative alle opzioni

Grafico del modello a oggetti di automazione

Altre risorse

Creazione e controllo delle finestre di ambiente

Creazione di componenti aggiuntivi e di procedure guidate

Riferimenti su Extensibility e automazione