Condividi tramite


procedura dettagliata: Per creare una finestra degli strumenti (parte 2 a 4)

Le finestre degli strumenti vengono creati implementando CreateToolWindow. Alcuni esempi delle finestre degli strumenti inclusi in Visual Studio sono Esplora soluzioni, Elenco attività, Elenco errorie la finestra di output. Tutte le finestre degli strumenti hanno alcune funzionalità comuni, ad esempio, il tutto può essere ancorato in modo analogo. L'ancoraggio e consente agli utenti di gestire in modo efficiente le attività e informazioni.

In questa procedura dettagliata viene illustrato come creare una finestra degli strumenti nell'IDE di Visual Studio tramite i passaggi seguenti:

  • Per creare una finestra degli strumenti.

  • Per importare un controllo nella finestra degli strumenti.

  • Aggiungere una barra degli strumenti a una finestra degli strumenti.

  • Per aggiungere controlli alla barra degli strumenti.

  • implementare i comandi.

  • Impostare il percorso predefinito della finestra degli strumenti.

In questa procedura dettagliata fa parte di una serie in cui viene illustrato come estendere l'IDE di Visual Studio. Per ulteriori informazioni, vedere Procedure dettagliate per personalizzare Visual Studio tramite package VS..

Prerequisiti

Per completare questa procedura dettagliata, è necessario installare Visual Studio 2010 SDK.

Nota

per ulteriori informazioni su Visual Studio SDK, vedere Cenni preliminari sull'estensione di Visual Studio.Per ulteriori informazioni su come scaricare Visual Studio SDK, vedere Centro per sviluppatori di estensibilità di Visual Studio il sito Web MSDN.

Posizioni del modello di progetto del pacchetto Visual Studio

Il modello di progetto del pacchetto Visual Studio è disponibile in tre percorsi nella finestra di dialogo di nuovo progetto :

  • In Estensibilità di Visual Basic. La lingua predefinita del progetto di Visual Basic.

  • In Estensibilità di C#. La lingua predefinita del progetto è c#.

  • In L'altra estensibilità dei tipi di progetto. La lingua predefinita del progetto è C++.

Per creare una finestra degli strumenti

Per creare una finestra degli strumenti

  1. Creare un package VS denominato FirstToolWin. È anche possibile creare una directory per la soluzione. Scegliere OK.

  2. Nella pagina di benvenuto, fare clic su dopo.

  3. Nella pagina di selezionare un linguaggio di programmazione , fare clic su Visual C# o fare clic su generare un nuovo file di chiave per firmare l'assemblydi Visual Basic quindi fare clic su dopo.

  4. richiedere un momento per esaminare la pagina di Informazioni di base di un VSPackage . Il valore della casella di Nome azienda viene utilizzato come spazio dei nomi per tutte le classi nel progetto. La casella di Nome di un VSPackage fornisce un nome per il pacchetto compilato finale e la casella di Versione di un VSPackage vengono fornite informazioni sulla versione. edizione minima di Visual Studio specifica che le edizioni di Visual Studio il pacchetto deve eseguire su. Il contenuto dell'elenco dei membri è possibile che debba essere aggiornato se il database di origine è stato modificato o se vengono visualizzati solo i membri del tipo selezionato e del tipo selezionato è stato modificato. Il pulsante di modificare l'icona consente di selezionare un'icona per rappresentare il pacchetto.

    Per questa procedura dettagliata, accettare semplicemente i valori predefiniti facendo clic su dopo.

    Informazioni di base su VSPackage

  5. Nella pagina di Selezionare le opzioni di package VS , comando di menu selezionato e Finestra degli strumentiquindi fare clic su dopo.

    Finestra di dialogo Opzioni di VSPackage

    Nota

    L'opzione del comando di menu è obbligatoria nella procedura dettagliata seguente procedura dettagliata: Estensione della finestra degli strumenti (parte 3 a 4), che sfrutta questo progetto.

  6. Nella pagina di Opzioni del comando di menu , nella casella di Nome del comando , tipo Windows Media. Nella casella di ID di comando , il tipo cmdidWindowsMediaquindi fare clic su dopo.

    FirstTool_Win5A

  7. Nella pagina di Opzioni della finestra degli strumenti , nella casella di Nome della finestra , tipo Windows Media Player. Nel campo di ID di comando , digitare un identificatore valido, ad esempio, cmdidWindowsMediaWinquindi fare clic su dopo.

    Finestra di dialogo Opzioni della finestra degli strumenti

  8. Nella pagina di opzioni selezionate di progetto di test , deselezionare progetto di test di integrazione e Progetto di unit testquindi fare clic su - Fine.

  9. In Esplora soluzioni, fare doppio clic su MyControl.xaml.

  10. Fare clic con il pulsante destro del mouse sul pulsante di Farmi clic su! quindi fare clic su Elimina.

Per importare un controllo nella finestra degli strumenti

Successivamente, aggiungere il controllo Windows Media Player su Casella degli strumenti e aggiungerlo alla finestra degli strumenti.

Per importare un controllo nella finestra degli strumenti

  1. In Casella degli strumenti, espandere la sezione di Tutti i controlli WPF e trovare elemento multimediale.

  2. Per aggiungere Media Player alla finestra degli strumenti, trascinare il controllo di elemento multimediale da Casella degli strumenti al form di MyControl.

  3. Nella finestra di progettazione, selezionare il controllo elemento multimediale ed esaminarne le proprietà disponibili nella finestra di Proprietà . Alcune proprietà sono standard in tutti i controlli Windows Form. Tuttavia, altri sono forniti dal controllo, ad esempio, database di origine, utilizzato per caricare un file in fase di esecuzione.

  4. Scegliere Salva tutto dal menu File.

Aggiungere una barra degli strumenti alla finestra degli strumenti

Aggiunta di una barra degli strumenti nel modo seguente, è opportuno garantire la presenza delle sfumature e colori sono coerenti con il resto dell'IDE.

Per aggiungere una barra degli strumenti alla finestra degli strumenti

  1. in Esplora soluzioni, aprire FirstToolWin.vsct. Il file di .vsct definisce gli elementi (GUI) dell'interfaccia utente grafica nella finestra degli strumenti mediante XML.

  2. Nella sezione di <Symbols> , individuare il nodo di <GuidSymbol> di cui l'attributo di name è guidFirstToolWinCmdSet. Aggiungere i due elementi di <IDSymbol> all'elenco di elementi di <IDSymbol> in questo nodo per definire una barra degli strumenti e un gruppo della barra degli strumenti.

    <IDSymbol name="ToolbarID" value="0x1000" />
    <IDSymbol name="ToolbarGroupID" value="0x1001" />
    
  3. Sopra la sezione di <Groups> , creare una sezione di <Menus>simile alla seguente:

    <Menus>
      <Menu guid="guidFirstToolWinCmdSet" id="ToolbarID"
            priority="0x0000" type="ToolWindowToolbar">
        <Parent guid="guidFirstToolWinCmdSet" id="ToolbarID" />
        <Strings>
          <ButtonText>Tool Window Toolbar</ButtonText>
          <CommandName>Tool Window Toolbar</CommandName>
        </Strings>
      </Menu>
    </Menus>
    

    Tutti i contenitori per i controlli sono definiti come tipi diversi di menu. Dal relativo attributo di type , questa viene impostata in modo che venga visualizzato come barra degli strumenti in una finestra degli strumenti. Le impostazioni diid e di guidcostituiscono ID completo della barra degli strumenti. In genere, <Parent> di un menu si riferisce al gruppo contenitore. Tuttavia, una barra degli strumenti è definita come relativo padre. Di conseguenza, lo stesso identificatore viene utilizzato per gli elementi di<Parent> e di <Menu>. L'attributo di priority è semplicemente “0 ".

  4. Le barre degli strumenti sono simili ai menu in molti modi. Ad esempio, proprio come un menu può contenere gruppi di controlli, le barre degli strumenti possono presentare anche gruppi. (I menu, i gruppi di controlli vengono separati dalle righe orizzontali. Barre degli strumenti, i gruppi non sono separati dai separatori visivi.)

    Aggiungere un nuovo elemento di <Group> alla sezione di <Groups> per definire il gruppo dichiarato nella sezione di <Symbols> .

    <Group guid="guidFirstToolWinCmdSet" id="ToolbarGroupID" priority="0x0000">
      <Parent guid="guidFirstToolWinCmdSet" id="ToolbarID"/>
    </Group>
    

    Impostando il GUID e l'id al GUID e l'id padre della barra degli strumenti, inserire il gruppo della barra degli strumenti.

  5. Salvare il file.

Per aggiungere controlli alla barra degli strumenti

Successivamente, aggiungere i controlli alla barra degli strumenti. I controlli vengono visualizzati come i pulsanti e.

Per aggiungere controlli alla barra degli strumenti

  1. In FirstToolWin.vsct, nella sezione di <Symbols> , dichiarare tre controlli immediatamente dopo che la barra degli strumenti e la barra degli strumenti raggruppano le dichiarazioni.

    <IDSymbol name="cmdidWindowsMediaOpen" value="0x132" />
    <IDSymbol name="cmdidWindowsMediaFilename" value="0x133" />
    <IDSymbol name="cmdidWindowsMediaFilenameGetList" value="0x134" />
    

    Si noti che i controlli cmdidWindowsMedia e cmdidWindowsMediaWin sono già dichiarati.

  2. Nella sezione di <Buttons> , un elemento di <Button> è già presente e contiene una definizione per i controlli del cmdidWindowsMediaWin e di cmdidWindowsMedia. aggiungere un altro elemento di <Button> per definire il comando di cmdidWindowsMediaOpen.

      <Button guid="guidFirstToolWinCmdSet"
            id="cmdidWindowsMediaOpen" priority="0x0101"
            type="Button">
      <Parent guid="guidFirstToolWinCmdSet"
              id="ToolbarGroupID"/>
      <Icon guid="guidImages" id="bmpPic1" />
      <Strings>
        <CommandName>cmdidWindowsMediaOpen</CommandName>
        <ButtonText>Load File</ButtonText>
      </Strings>
    </Button>
    

    Si noti che la priorità del secondo pulsante viene 0x0101. La casella combinata che viene aggiunto nel passaggio successivo ha la priorità 0x0100. Di conseguenza, la casella combinata nella prima posizione e il pulsante verrà visualizzato nella seconda posizione.

  3. Per fornire una posizione all'utente di immettere del testo, aggiungere una casella combinata. L'aggiunta della casella combinata è come aggiungere un pulsante, con la differenza che definisce la casella combinata in una sezione di <Combos> .

    Creare una sezione di <Combos> , subito dopo il tag di </Buttons> , con una voce per definire la casella combinata.

    <Combos>
      <Combo guid="guidFirstToolWinCmdSet"
             id="cmdidWindowsMediaFilename"
             priority="0x0100" type="DynamicCombo"
             idCommandList="cmdidWindowsMediaFilenameGetList"
             defaultWidth="130">
        <Parent guid="guidFirstToolWinCmdSet"
                id="ToolbarGroupID" />
        <CommandFlag>IconAndText</CommandFlag>
        <CommandFlag>CommandWellOnly</CommandFlag>
        <CommandFlag>StretchHorizontally</CommandFlag>
        <Strings>
          <CommandName>Filename</CommandName>
          <ButtonText>Enter a Filename</ButtonText>
        </Strings>
      </Combo>
    </Combos>
    
  4. salvare e chiudere FirstToolWin.vsct.

  5. In Esplora soluzioni, nella cartella del progetto, PkgCmdID.cs aperti o PkgCmdID.vb quindi aggiungere le seguenti righe nella classe immediatamente dopo i membri esistenti.

    Public Const cmdidWindowsMediaOpen As Integer = &H132
    Public Const cmdidWindowsMediaFilename As Integer = &H133
    Public Const cmdidWindowsMediaFilenameGetList As Integer = &H134
    Public Const ToolbarID As Integer = &H1000
    
    public const int cmdidWindowsMediaOpen = 0x132;
    public const int cmdidWindowsMediaFilename = 0x133;
    public const int cmdidWindowsMediaFilenameGetList = 0x134;
    public const int ToolbarID = 0x1000;
    

    Questa operazione rende disponibili i controlli nel codice.

  6. Salvare e chiudere il file.

Implementare i controlli

Scrivere ora il codice che implementa i controlli.

Per implementare i controlli

  1. In Esplora soluzioni, aprire MyToolWindow.cs o MyToolWindow.vb, che contengono la classe per la finestra degli strumenti stessa.

    Aggiungere il codice seguente subito dopo le istruzioni using esistenti.

    Imports System.ComponentModel.Design
    
    using System.ComponentModel.Design;
    

    Questa riga consente di utilizzare la classe di CommandID senza dover utilizzare un nome completo.

  2. Aggiungere il seguente codice al costruttore, subito prima della riga che riporta control = new MyControl() (c#) o Me.Content = New MyControl() (VB).

    ' Create the toolbar.  
    Me.ToolBar = New CommandID(GuidList.guidFirstToolWinCmdSet, PkgCmdIDList.cmdidWindowsMediaWin)
    Me.ToolBarLocation = CInt(VSTWT_LOCATION.VSTWT_TOP)
    
    ' Create the handlers for the toolbar commands.  
    Dim mcs As OleMenuCommandService = TryCast(GetService(GetType(IMenuCommandService)), OleMenuCommandService)
    If mcs IsNot Nothing Then 
        Dim toolbarbtnCmdID As CommandID = New CommandID(GuidList.guidFirstToolWinCmdSet, PkgCmdIDList.cmdidMyCommand)
        Dim menuItem As MenuCommand = New MenuCommand(New EventHandler(AddressOf ButtonHandler), toolbarbtnCmdID)
        mcs.AddCommand(menuItem)
    
        ' Command for the combo itself  
        Dim menuMyDynamicComboCommandID As CommandID = New CommandID(GuidList.guidFirstToolWinCmdSet, CInt(PkgCmdIDList.cmdidMyCommand))
        Dim menuMyDynamicComboCommand As OleMenuCommand = New OleMenuCommand(New EventHandler(AddressOf ComboHandler), menuMyDynamicComboCommandID)
        mcs.AddCommand(menuMyDynamicComboCommand)
    
        ' Command for the combo's list  
        Dim comboListCmdID As CommandID = New CommandID(GuidList.guidFirstToolWinCmdSet, PkgCmdIDList.cmdidWindowsMediaWin)
        Dim comboMenuList As OleMenuCommand = New OleMenuCommand(New EventHandler(AddressOf ComboListHandler), comboListCmdID)
        mcs.AddCommand(comboMenuList)
    End If
    
    // Create the toolbar. 
    this.ToolBar = new CommandID(GuidList.guidFirstToolWinCmdSet,
        PkgCmdIDList.ToolbarID);
    this.ToolBarLocation = (int)VSTWT_LOCATION.VSTWT_TOP;
    
    // Create the handlers for the toolbar commands. 
    var mcs = GetService(typeof(IMenuCommandService))
        as OleMenuCommandService;
    if (null != mcs)
    {
        var toolbarbtnCmdID = new CommandID(
            GuidList.guidFirstToolWinCmdSet,
            PkgCmdIDList.cmdidWindowsMediaOpen);
        var menuItem = new MenuCommand(new EventHandler(
            ButtonHandler), toolbarbtnCmdID);
        mcs.AddCommand(menuItem);
    
        // Command for the combo itself 
        var menuMyDynamicComboCommandID = new CommandID(
            GuidList.guidFirstToolWinCmdSet,
            (int)PkgCmdIDList.cmdidWindowsMediaFilename);
        var menuMyDynamicComboCommand = new OleMenuCommand(
            new EventHandler(ComboHandler),
            menuMyDynamicComboCommandID);
        mcs.AddCommand(menuMyDynamicComboCommand);
    
        // Command for the combo's list 
        var comboListCmdID = new CommandID(
            GuidList.guidFirstToolWinCmdSet,
            PkgCmdIDList.cmdidWindowsMediaFilenameGetList);
        var comboMenuList = new OleMenuCommand(
            new EventHandler(ComboListHandler), comboListCmdID);
        mcs.AddCommand(comboMenuList);
    } 
    

    Questo codice aggiunge tre controlli, uno per il pulsante e due per la casella combinata. La casella combinata richiede due controlli, uno per quando l'utente effettua una voce e uno per compilare l'elenco a discesa.

  3. I gestori eventi per i controlli della barra degli strumenti, il codice deve essere in grado di accedere al controllo di Media Player, che è un elemento figlio della classe di MyControl.

    In Esplora soluzioni, fare clic con il pulsante destro del mouse su MyControl.xaml, fare clic Visualizza codicee aggiungere il codice seguente alla classe di MyControl.

    Public ReadOnly Property MediaPlayer() As System.Windows.Controls.MediaElement
        Get 
            Return MediaElement1
        End Get 
    End Property
    
    public System.Windows.Controls.MediaElement MediaPlayer
    {
        get { return mediaElement1; }
    }
    
  4. Salvare il file.

  5. Tornare a MyToolWindow.cs o a MyToolWindow.vb e aggiungere il codice seguente alla fine della classe, subito prima delle due parentesi graffe di apertura e chiusura (c#) o un'istruzione End Class (Visual Basic).

    Private Sub ButtonHandler(ByVal sender As Object, ByVal arguments As EventArgs)
        If comboValue IsNot Nothing AndAlso comboValue.Trim().Length <> 0 Then
            LoadFile(comboValue)
        End If 
    End Sub 
    
    Private Sub ComboHandler(ByVal sender As Object, ByVal arguments As EventArgs)
        Dim eventArgs As OleMenuCmdEventArgs = TryCast(arguments, OleMenuCmdEventArgs)
        If eventArgs IsNot Nothing Then 
            Dim output As IntPtr = eventArgs.OutValue
            Dim input As Object = eventArgs.InValue
            If input IsNot Nothing Then
                comboValue = input.ToString()
            ElseIf output <> IntPtr.Zero Then
                Marshal.GetNativeVariantForObject(comboValue, output)
            End If 
        End If 
    End Sub 
    
    Public Sub LoadFile(ByVal comboValue As String)
        control.MediaPlayer.Source = New Uri(comboValue)
    End Sub 
    
    Private Sub ComboListHandler(ByVal sender As Object, ByVal arguments As EventArgs)
    End Sub
    
        private void ButtonHandler(object sender,
    EventArgs arguments)
        {
            if (comboValue != null && comboValue.Trim().Length != 0)
            {
                LoadFile(comboValue);
            }
        }
    
        private void ComboHandler(object sender, EventArgs arguments)
        {
            var eventArgs = arguments as OleMenuCmdEventArgs;
            if (eventArgs != null)
            {
                IntPtr output = eventArgs.OutValue;
                object input = eventArgs.InValue;
                if (input != null)
                {
                    comboValue = input.ToString();
                }
                else if (output != IntPtr.Zero)
                {
                    Marshal.GetNativeVariantForObject(comboValue,
                        output);
                }
            }
        }
    
        public void LoadFile(string comboValue)
        {
            control.MediaPlayer.Source = new System.Uri(comboValue);
        }
    
        private void ComboListHandler(object sender,
            EventArgs arguments)
        {
        }
    

    Si noti che il menuMyDynamicComboCommand e il menuItem condividono lo stesso gestore eventi. Di conseguenza, la finestra degli strumenti possibile riprodurre il file specificato nella casella combinata. In questa procedura dettagliata, non si fornisce il codice per la funzione di ComboListHandler. Nella procedura dettagliata successiva procedura dettagliata: Estensione della finestra degli strumenti (parte 3 a 4), aggiungere il codice che compila l'elenco a discesa utilizzando i nomi di playlist.

  6. Il gestore combinato salva qualsiasi elemento digitato in una variabile membro. Per aggiungere tale variabile, aggiungere il seguente codice all'inizio della classe (in Visual Basic, dopo che eredita l'istruzione). Contemporaneamente, aggiungere una variabile membro per contenere il controllo.

    Dim control As MyControl
    Dim comboValue As String
    
    private MyControl control;
    string comboValue = "";
    

    Quando si fa clic sul pulsante, il pulsante indica il valore di questi variabile locale e caricati in Media Player.

Impostare il percorso predefinito della finestra degli strumenti

Successivamente, specificare una posizione predefinita nell'IDE per la finestra degli strumenti. Le informazioni di configurazione per la finestra degli strumenti si trovano nel file di FirstToolWinPackage.cs.

Per impostare il percorso predefinito della finestra degli strumenti

  1. in Esplora soluzioni, aprire FirstToolWinPackage.cs o FirstToolWinPackage.vb. In questo file, individuare l'attributo di ProvideToolWindowAttribute sulla classe di FirstToolWinPackage . Questo codice sta passando il tipo di MyToolWindow al costruttore. Per specificare un percorso predefinito, è necessario aggiungere più parametri del costruttore dopo l'esempio.

    <PackageRegistration(UseManagedResourcesOnly:=True), _
    InstalledProductRegistration("#110", "#112", "1.0", IconResourceID:=400), _
    ProvideMenuResource("Menus.ctmenu", 1), _
    ProvideToolWindow(GetType(MyToolWindow), Style:=Microsoft.VisualStudio.Shell.VsDockStyle.Tabbed, Window:="3ae79031-e1bc-11d0-8f78-00a0c9110057"), _
    Guid(GuidList.guidFirstToolWinPkgString)> _
    Public NotInheritable Class FirstToolWinPackage
        Inherits Package
    
    [ProvideToolWindow(typeof(MyToolWindow),
        Style = Microsoft.VisualStudio.Shell.VsDockStyle.Tabbed,
        Window = "3ae79031-e1bc-11d0-8f78-00a0c9110057")]
    

    Il primo parametro costituisce stile e il relativo valore corrisponde a schede, ovvero la finestra verrà una scheda in una finestra esistente. La finestra è fornita dal parametro denominato della finestra; il valore è un GUID. In questo caso, il GUID è quello di Esplora soluzioni.

    Nota

    Per ulteriori informazioni sui GUID per le finestre dell'IDE, vedere costanti di vsWindowKind il sito Web MSDN.

  2. Salvare il lavoro.

Test della finestra degli strumenti

Per testare la finestra degli strumenti

  1. Premere F5 per aprire una nuova istanza della compilazione sperimentale di Visual Studio.

  2. Scegliere dal menu di visualizzazione , il punto a altre finestre quindi fare clic su Windows Media Player.

    La finestra degli strumenti del lettore multimediale necessario aprire nella stessa finestra di Esplora soluzioni.

  3. Nella casella combinata nella finestra degli strumenti del lettore multimediale, digitare il percorso completo e il nome file di un suono o di un file video supportato, ad esempio, C:\windows\media\chimes.wav, premere Immetterequindi fare clic sul pulsante contiguo.

    Nota

    È necessario un nome nella casella di testo in quanto la finestra degli strumenti del lettore multimediale non ha una finestra di dialogo di file aperto .

Argomenti successivi

In procedura dettagliata: Estensione della finestra degli strumenti (parte 3 a 4), è possibile imparare come aggiungere più controlli nella finestra degli strumenti. Aggiungere un pulsante che consente di visualizzare una finestra di dialogo di file aperto , che è possibile utilizzare per selezionare un file da riprodurre in Media Player. Verrà inoltre aggiunto un elenco a discesa di playlist in modo che sia possibile selezionare è una da riprodurre.

Vedere anche

Attività

procedura dettagliata: Aggiunta di una barra degli strumenti all'IDE

procedura dettagliata: Aggiunta di una barra degli strumenti a una finestra degli strumenti

Altre risorse

Controlli, menu e barre degli strumenti