Condividi tramite


Campi e interfacce della finestra Proprietà

Modello per la selezione per determinare quali informazioni vengono visualizzate nella finestra Proprietà in base alla finestra con stato attivo nell'IDE. Ogni finestra e oggetto all'interno della finestra selezionata può avere il relativo oggetto contesto di selezione inserito nel contesto di selezione globale. L'ambiente aggiorna il contesto di selezione globale con i valori di una cornice di finestra quando tale finestra ha lo stato attivo. Quando lo stato attivo cambia, in questo modo il contesto di selezione.

Rilevamento della selezione nell'IDE

La cornice o il sito della finestra, di proprietà dell'IDE, ha un servizio denominato STrackSelection. I passaggi seguenti illustrano come viene implementata una modifica di una selezione, causata dalla modifica dello stato attivo in un'altra finestra aperta o dalla selezione di un elemento di progetto diverso in Esplora soluzioni, per modificare il contenuto visualizzato nella finestra Proprietà.

  1. L'oggetto creato dal pacchetto VSPackage che si trova nella finestra selezionata chiama QueryService per STrackSelection richiamare ITrackSelection.

  2. Il contenitore di selezione, fornito dalla finestra selezionata, crea il proprio ISelectionContainer oggetto. Quando la selezione cambia, il VSPackage chiama OnSelectChange per notificare a tutti i listener nell'ambiente, inclusa la finestra Proprietà , della modifica. Fornisce inoltre l'accesso alle informazioni relative alla gerarchia e agli elementi correlati alla nuova selezione.

  3. La chiamata OnSelectChange e il passaggio degli elementi della gerarchia selezionati nel VSHPROPID_BrowseObject parametro popolano l'oggetto ISelectionContainer .

  4. Per __VSHPROPID viene restituito un oggetto derivato dall'interfaccia IDispatch. VSHPROPID_BrowseObject per l'elemento richiesto e l'ambiente lo esegue in un ISelectionContainer (vedere il passaggio seguente). Se la chiamata ha esito negativo, l'ambiente effettua una seconda chiamata a IVsHierarchy::GetProperty, passandolo al contenitore di selezione __VSHPROPID. VSHPROPID_SelContainer che l'elemento o gli elementi della gerarchia forniscono.

    Il pacchetto VSPackage del progetto non viene creato ISelectionContainer perché il VSPackage della finestra fornita dall'ambiente che lo implementa (ad esempio, Esplora soluzioni) costruisce ISelectionContainer per suo conto.

  5. L'ambiente richiama i metodi di ISelectionContainer per ottenere gli oggetti in base all'interfaccia IDispatch per compilare la finestra Proprietà .

    Quando viene modificato un valore nella finestra Proprietà , i pacchetti VSPackage implementano IVsTrackSelectionEx::OnElementValueChangeEx e IVsTrackSelectionEx::OnSelectionChangeEx segnalano la modifica al valore dell'elemento. L'ambiente richiama quindi o IConnectionPointContainer per mantenere sincronizzate IVsUIShell le informazioni visualizzate nella finestra Proprietà con i valori della proprietà. Per altre informazioni, vedere Aggiornamento dei valori delle proprietà nella finestra Proprietà.

    Oltre a selezionare un elemento di progetto diverso in Esplora soluzioni per visualizzare le proprietà correlate a tale elemento, è anche possibile scegliere un oggetto diverso dall'interno di una maschera o di una finestra di documento usando l'elenco a discesa disponibile nella finestra Proprietà. Per altre informazioni, vedere Elenco di oggetti Finestra proprietà.

    È possibile modificare la modalità di visualizzazione delle informazioni nella griglia della finestra Proprietà da alfabetica a categorica e, se disponibile, è anche possibile aprire una pagina delle proprietà per un oggetto selezionato facendo clic sui pulsanti appropriati nella finestra Proprietà . Per altre informazioni, vedere Proprietà Pulsanti finestra e pagine delle proprietà.

    Infine, la parte inferiore della finestra Proprietà contiene anche una descrizione del campo selezionato nella griglia delle finestre Proprietà . Per altre informazioni, vedere Recupero di descrizioni dei campi dalla finestra Proprietà.

Aggiornamento dei valori della proprietà nella finestra Proprietà

Esistono due modi per mantenere sincronizzata la finestra Proprietà con le modifiche dei valori della proprietà. Il primo consiste nel chiamare l'interfaccia IVsUIShell, che fornisce l'accesso alle funzionalità di windowing di base, inclusi l'accesso e la creazione di finestre degli strumenti e dei documenti fornite dall'ambiente. I passaggi seguenti descrivono il processo di sincronizzazione.

Aggiornamento dei valori di proprietà tramite IVsUIShell

Per aggiornare i valori di proprietà tramite l'interfaccia IVsUIShell

  1. Chiamare IVsUIShell (tramite il servizio SVsUIShell) ogni volta che VSPackage, progetti o editor devono creare o enumerare finestre degli strumenti o dei documenti.

  2. Implementare RefreshPropertyBrowser per mantenere sincronizzata la finestra Proprietà con le modifiche delle proprietà per un progetto (o qualsiasi altro oggetto selezionato visualizzato dalla finestra Proprietà ) senza implementare IConnectionPointContainer e generare OnChanged eventi.

  3. Implementare i metodi IVsHierarchyAdviseHierarchyEvents e UnadviseHierarchyEvents per stabilire e disabilitare, rispettivamente, la notifica client degli eventi di gerarchia senza richiedere l'implementazione di IConnectionPointContainer nella gerarchia.

Aggiornamento dei valori di proprietà tramite IConnection

Il secondo modo per mantenere sincronizzata la finestra Proprietà con le modifiche dei valori della proprietà consiste nell'implementare IConnection sull'oggetto collegabile per indicare l'esistenza delle interfacce in uscita. Se si vuole localizzare il nome della proprietà, derivare l'oggetto da ICustomTypeDescriptor. L'implementazione ICustomTypeDescriptor può modificare i descrittori di proprietà che restituisce e cambiare il nome di una proprietà. Per localizzare la descrizione, creare un attributo che deriva da DescriptionAttribute ed eseguire l'override della proprietà Description.

Considerazioni relative all'implementazione dell'interfaccia IConnection

  1. IConnection fornisce l'accesso a un oggetto secondario enumeratore con l'interfaccia IEnumConnectionPoints. Fornisce inoltre l'accesso a tutti gli oggetti secondari del punto di connessione, ciascuno dei quali implementa l'interfaccia IConnectionPoint.

  2. Qualsiasi oggetto è responsabile dell'implementazione di un evento IPropertyNotifySink. Nella finestra Proprietà verrà indicato l'evento impostato tramite IConnection.

  3. Un punto di connessione controlla il numero di connessioni (una o più) che consente nella propria implementazione di Advise. Un punto di connessione che consente una sola interfaccia può restituire E_NOTIMPL dal metodo EnumConnections.

  4. Un client può chiamare l'interfaccia IConnection per ottenere l'accesso a un oggetto secondario enumeratore con l'interfaccia IEnumConnectionPoints. L'interfaccia IEnumConnectionPoints può quindi essere chiamata per enumerare i punti di connessione per ogni ID di interfaccia (IID) in uscita.

  5. IConnection può anche essere chiamato per ottenere l'accesso agli oggetti secondari del punto di connessione con l'interfaccia IConnectionPoint per ogni IID in uscita. Tramite l'interfaccia IConnectionPoint , un client avvia o termina un ciclo di consulenza con l'oggetto connettibile e la sincronizzazione del client. Il client può anche chiamare l'interfaccia IConnectionPoint per ottenere un oggetto enumeratore con l'interfaccia IEnumConnections per enumerare le connessioni di cui è a conoscenza.

Descrizioni dei campi dalla finestra Proprietà

Nella parte inferiore della finestra Proprietà è disponibile un'area per la descrizione che visualizza informazioni relative al campo della proprietà selezionata. Per impostazione predefinita, questa funzionalità è attivata. Se si vuole nascondere il campo della descrizione, fare clic con il pulsante destro del mouse nella finestra Proprietà e fare clic su Descrizione. In questo modo viene anche rimosso il segno di spunta accanto al titolo Descrizione nella finestra del menu. È possibile visualizzare di nuovo il campo con la stessa procedura per riattivare il campo Descrizione .

Le informazioni visualizzate nel campo della descrizione derivano da ITypeInfo. Per ogni metodo, interfaccia, coclasse e così via può esistere un attributo helpstring non localizzato nella libreria dei tipi. La finestra Proprietà recupera la stringa da GetDocumentation.

Per specificare stringhe della Guida localizzate

  1. Aggiungere l'attributo helpstringdll all'istruzione library nella libreria dei tipi (typelib).

    Nota

    Questo passaggio è facoltativo se la libreria dei tipi è inclusa in un file di libreria di oggetti (con estensione olb).

  2. Specificare gli attributi helpstringcontext per le stringhe. È anche possibile specificare attributi helpstring .

    Questi attributi sono distinti dagli attributi helpfile e helpcontext , contenuti negli argomenti della Guida nei file effettivi con estensione chm.

    Per recuperare le informazioni sulla descrizione da visualizzare per il nome della proprietà evidenziato, la finestra Proprietà chiama GetDocumentation2 la proprietà selezionata, specificando l'attributo desiderato lcid per la stringa di output. Internamente, ITypeInfo2 trova il file DLL specificato nell'attributo helpstringdll e chiama DLLGetDocumentation su tale file DLL con il contesto e l'attributo lcid specificati.

    La firma e l'implementazione di DLLGetDocumentation sono:

STDAPI DLLGetDocumentation
(
   ITypeLib * /* ptlib */,
   ITypeInfo * /* ptinfo */,
   LCID /* lcid */,
   DWORD dwCtx,
   BSTR * pbstrHelpString
);

La funzione DLLGetDocumentation deve essere un'esportazione definita nel file con estensione def per la DLL.

Internamente, viene creato un file con estensione olb che è in effetti una DLL. Questa DLL contiene una sola risorsa, il file della libreria dei tipi (con estensione tlb) e una funzione esportata, DLLGetDocumentation.

Nel caso dei file con estensione olb, l'attributo helpstringdll è facoltativo perché si tratta dello stesso file che contiene il file con estensione tlb.

Per recuperare le stringhe da visualizzare nel riquadro Descrizione , quindi, è necessario come minimo specificare l'attributo helpstring nella libreria dei tipi. Se si vuole localizzare le stringhe, è necessario specificare l'attributo facoltativo helpstringdll e l'attributo obbligatorio helpstringcontext , quindi implementare DLLGetDocumentation.

Non è necessario implementare altre interfacce quando si recuperano le informazioni localizzate tramite l'attributo helpstringcontext dell'istruzione IDL e DLLGetDocumentation.

Un altro modo per ottenere il nome e la descrizione localizzati per una proprietà è implementando GetLocalizedPropertyInfo. Per altre informazioni sull'implementazione di questo metodo, vedere Properties Window Fields and Interfaces.

Vedi anche