procedura dettagliata: Estensione della finestra degli strumenti (parte 3 a 4)
In questa procedura dettagliata, aggiungere alla finestra degli strumenti creata in. procedura dettagliata: Per creare una finestra degli strumenti (parte 2 a 4) Aggiungere un pulsante che consente di visualizzare una finestra di dialogo di file aperto in modo che sia possibile selezionare di un file per riprodurre in Media Player.
In questa procedura dettagliata viene illustrato come aggiungere visibilità dinamica a un comando di menu.
In questa procedura dettagliata è una di una serie in cui viene illustrato come estendere l'ambiente di sviluppo integrato di Visual (IDE) Studio. Per ulteriori informazioni, vedere Procedure dettagliate per personalizzare Visual Studio tramite package VS..
Aggiungere la visibilità dinamica a un comando di menu
Per impostazione predefinita, i comandi di menu vengono fissate sul posto e non possono essere nascosti dopo che vengono visualizzati. Tuttavia, la progettazione in questa procedura dettagliata è che il pacchetto decide in fase di esecuzione se il comando deve essere visibile, in base a se la finestra degli strumenti di Media Player è attiva.
È innanzitutto necessario modificare FirstToolWin.vsct per abilitare la visibilità dinamica, quindi si implementa la logica per impostare la visibilità nel codice. Creare una classe per utilizzare gli eventi della finestra degli strumenti, quindi si modifica il pacchetto per rendere l'oggetto del comando di menu accessibile e li utilizzate insieme.
Per abilitare visibilità dinamica
Aprire il progetto “FirstToolWin„, creata in. procedura dettagliata: Per creare una finestra degli strumenti (parte 2 a 4)
in Esplora soluzioni, aprire FirstToolWin.vsct.
Trovare l'elemento con l'ID, cmdidWindowsMediadi <Button> . Tra la definizione di <icon> e la sezione di <Strings> , aggiungere due flag del comando, come segue.
<CommandFlag>DefaultInvisible</CommandFlag> <CommandFlag>DynamicVisibility</CommandFlag>
Salvare il file.
Per creare gli eventi della finestra degli strumenti
In Esplora soluzioni, fare clic con il pulsante destro del mouse sul nome del progetto, scegliere aggiungerequindi fare clic su classe.
Nella finestra di dialogo di Aggiungi nuovo elemento , denominare il file ToolWindowEvents.cs o ToolWindowEvents.vb quindi fare clic su aggiungere.
Aprire ToolWindowEvents.cs o ToolWindowEvents.vb e aggiungere il codice seguente dopo tutti gli using istruzioni o esistenti di Imports .
Imports System Imports System.Collections.Generic Imports System.Linq Imports System.Text Imports Microsoft.VisualStudio.Shell.Interop Imports System.ComponentModel.Design Imports System.Security.Permissions
using Microsoft.VisualStudio.Shell.Interop; using System.ComponentModel.Design; using System.Security.Permissions;
Modificare la dichiarazione di classe in modo che sia public e sealed, (Public e NotInheritable in Visual Basic) e ereditato dall'interfaccia di IVsWindowFrameNotify3 , come illustrato di seguito.
Public NotInheritable Class ToolWindowEvents Implements IVsWindowFrameNotify3
public sealed class ToolWindowEvents : IVsWindowFrameNotify3
Se si utilizza c#, fare clic con il pulsante destro del mouse su IVsWindowFrameNotify3, scegliere implementare l'interfacciaquindi fare clic su implementare l'interfaccia per aggiungere automaticamente i metodi che sono obbligatori per l'interfaccia.
Se si utilizza Visual Basic, ignorare questo passaggio.
Implementare il metodo di OnShow , come illustrato di seguito.
Public Function OnShow(ByVal fShow As Integer) As Integer Implements VisualStudio.Shell.Interop.IVsWindowFrameNotify3.OnShow If Not fShow = __FRAMESHOW.FRAMESHOW_WinHidden Then package.toolMenuItem1.visible = True End If Return Microsoft.VisualStudio.VSConstants.S_OK End Function
[PrincipalPermission(SecurityAction.Demand)] public int OnShow(int fShow) { package.toolMenuItem1.Visible = ((__FRAMESHOW)fShow != __FRAMESHOW.FRAMESHOW_WinHidden); return Microsoft.VisualStudio.VSConstants.S_OK; }
Inserire il contenuto dei membri di interfaccia rimanenti di IVsWindowFrameNotify3 utilizzando la seguente istruzione return.
Return Microsoft.VisualStudio.VSConstants.S_OK
return Microsoft.VisualStudio.VSConstants.S_OK;
Avviso
In c#, i membri di interfaccia verranno popolati con le istruzioni di throw , che è necessario sovrascrivere.in Visual Basic, le funzioni svuoteranno.
Il codice aggiunto dichiara la classe che riceve gli eventi per la finestra degli strumenti. L'evento qui utilizzato è OnShow, in cui la visibilità del comando di menu viene stabilito in base al valore passato all'evento. Il valore passato è un'enumerazione del tipo __FRAMESHOW. Sebbene questa enumerazione dispone di diversi valori possibili, in questo caso, è necessario verificare se è uguale a FRAMESHOW_WinHidden. Se non è uguale, quindi impostare visibile su true. Se è uguale, quindi impostare visibile su false.
Tuttavia, si noti che questo codice utilizza una variabile denominata “package„. Tale variabile viene passata al costruttore.
Aggiungere il seguente codice all'inizio della classe, sopra l'area in cui i membri di interfaccia di IVsWindowFrameNotify3 vengono definiti.
Private package As FirstToolWinPackage Public Sub New(ByVal apackage As FirstToolWinPackage) package = apackage End Sub
private FirstToolWinPackage package; public ToolWindowEvents(FirstToolWinPackage apackage) { package = apackage; }
Il valore passato in questo costruttore è il pacchetto stesso, l'istanza di FirstToolWin. Evento di OnShow, il comando di menu è necessario accedere a. Per impostazione predefinita, questo comando di menu è una variabile locale con l'ambito nel metodo Initialize del pacchetto.
Salvare il file.
Per accedere al comando di menu
In Esplora soluzioni, aprire FirstToolWinPackage.cs o FirstToolWinPackage.vb in modo da poter modificare la classe di FirstToolWin per rendere l'oggetto del comando di menu accessibile.
Dichiarare un oggetto di MenuCommand all'inizio della classe per rappresentare il comando di menu.
Public toolMenuItem1 As MenuCommand
public MenuCommand toolMenuItem1;
Individuare il metodo Initialize. Individuare le due righe, creare il primo comando.
Dim menuItem As New MenuCommand(New EventHandler(AddressOf MenuItemCallback), menuCommandID) mcs.AddCommand(menuItem)
MenuCommand menuItem = new MenuCommand(MenuItemCallback, menuCommandID); mcs.AddCommand(menuItem);
Sostituire l'oggetto predefinito di MenuCommand tramite la variabile pubblica che è stata dichiarata prima.
Dim toolMenuItem1 As New MenuCommand(New EventHandler(AddressOf MenuItemCallback), menuCommandID) mcs.AddCommand(toolMenuItem1)
toolMenuItem1 = new MenuCommand(MenuItemCallback, menuCommandID); mcs.AddCommand(toolMenuItem1);
Salvare il file.
Successivamente, sarà creata un'istanza della finestra degli strumenti e anche un'istanza della classe appena creata per ricevere eventi. È quindi possibile allegare l'istanza della classe all'istanza della finestra degli strumenti.
Per associare gli eventi
in Esplora soluzioni, aprire MyToolWindow.cs o MyToolWindow.vb. Eseguire l'override del metodo di OnToolWindowCreated aggiungendo il seguente codice alla fine del file, prima della parentesi graffa di chiusura della definizione della classe.
Public Overrides Sub OnToolWindowCreated() MyBase.OnToolWindowCreated() Dim handler As FirstToolWinPackage = CType( _ Me.Package, FirstToolWinPackage) CType(Me.Frame, IVsWindowFrame).SetProperty( _ CInt(__VSFPROPID.VSFPROPID_ViewHelper), handler) End Sub
public override void OnToolWindowCreated() { base.OnToolWindowCreated(); var handler = new ToolWindowEvents( (FirstToolWinPackage)this.Package); ((IVsWindowFrame)this.Frame).SetProperty( (int)__VSFPROPID.VSFPROPID_ViewHelper, handler); }
Viene creata una nuova istanza della classe che è stata aggiunta in precedenza. Aggiungere l'istanza alle proprietà del frame in modo che possa ricevere l'istanza gli eventi. Il metodo di SetProperty eseguire questa operazione quando si passa il valore di enumerazione VSFPROPID_ViewHelper per il primo parametro e la nuova istanza del gestore per il secondo parametro.
Salvare il file.
Per verificare il codice
Premere F5 per compilare il progetto ed eseguirlo nella compilazione sperimentale di Visual Studio.
Fare clic sul menu Strumenti.
Il comando di menu di WindowsMedia non deve essere visualizzato.
Scegliere dal menu di visualizzazione , il punto a altre finestre quindi fare clic su Windows Media Player per visualizzare la finestra di Media Player.
Fare nuovamente clic sul menu di strumenti .
Ora, il comando di menu di WindowsMedia deve verificarsi perché dispone di visibilità dinamica, ovvero se è visibile è basato su se la finestra di Media Player è visibile.
Chiudere la finestra di Media Player quindi controllare il menu di strumenti ancora.
Ora, il comando di menu di WindowsMedia non deve essere visualizzato.
Chiudere la compilazione sperimentale.
Aggiungere il codice di Windows Form per interagire con la finestra degli strumenti
A questo punto, aggiungere il codice alla classe del pacchetto che risponde al comando di menu. Questo codice consente di aprire una finestra di dialogo di file aperto e chiamare il nuovo metodo di LoadFile per caricare un file in Media Player.
Per attivare la finestra degli strumenti nel codice
aprire FirstToolWinPackage.cs.
Aggiungere lo spazio dei nomi di System.Windows.Forms subito dopo le istruzioni using esistenti, ad esempio seguente.
Imports System.Windows.Forms
using System.Windows.Forms;
Individuare il gestore del menu di MenuItemCallback . Si tratta del gestore eventi per il clic sul comando di menu. Sostituire il corpo del gestore del menu utilizzando il codice seguente.
Dim openFileDialog As System.Windows.Forms.OpenFileDialog = New System.Windows.Forms.OpenFileDialog() Dim result As DialogResult = openFileDialog.ShowDialog() If (result = DialogResult.OK) Then Dim window As MyToolWindow = TryCast(Me.FindToolWindow(GetType(MyToolWindow), 0, True), MyToolWindow) If (window IsNot Nothing) Then window.LoadFile(openFileDialog.FileName) End If End If
System.Windows.Forms.OpenFileDialog openFileDialog = new System.Windows.Forms.OpenFileDialog(); DialogResult result = openFileDialog.ShowDialog(); if (result == DialogResult.OK) { MyToolWindow window = (MyToolWindow)(this.FindToolWindow( typeof(MyToolWindow), 0, true)); if (window != null) { window.LoadFile(openFileDialog.FileName); } }
Salvare il lavoro.
Questo codice consente di aprire una finestra di dialogo di file aperto in modo che sia possibile passare al file multimediale che si desidera caricare in Media Player. Individuare l'istanza di MyToolWindow e chiama il metodo di LoadFile, creato precedentemente, per caricare il file multimediale.
Per verificare il codice
Premere F5 per compilare il progetto ed eseguirlo nell'istanza sperimentale di Visual Studio.
Scegliere dal menu di strumenti , fare clic su WindowsMedia.
La finestra di dialogo di file aperto deve essere visualizzato.
Nella finestra di dialogo di file aperto , selezionare un file multimediale valido e fare clic su OK.
Il file deve essere riprodotta in Media Player.
chiudere l'istanza sperimentale.
Argomenti successivi
In questa procedura dettagliata viene illustrato come aggiungere controlli di menu con visibilità dinamica. Viene inoltre illustrato come aggiungere controlli a una finestra degli strumenti che interagiscono con altri controlli nella finestra degli strumenti. Questi concetti si applicano in generale alle finestre degli strumenti. I controlli aggiunti da vicino alle finestre degli strumenti sono simili ai controlli utente da utilizzare in un'applicazione Windows Form.
Nella procedura dettagliata successiva procedura dettagliata: L'integrazione nella Finestra Proprietà, nell'elenco attività, nella Finestra di output e nella finestra di dialogo Opzioni (parte 4 a 4), viene illustrato come integrare la finestra degli strumenti con le finestre degli strumenti esistenti in Visual Studio, ad esempio la finestra di Proprietà , la finestra di output e la finestra di Elenco attività .