Comment : manipuler des arborescences à l'aide de l'objet UIHierarchy
Les macros complémentaires Visual Studio sont déconseillées dans Visual Studio 2013. Vous devriez mettre vos macros complémentaires à niveau vers des extensions VSPackage. Pour plus d'informations sur les mises à jour, consultez FAQ : conversion de compléments en extensions VSPackage.
Certaines fenêtres Outil de Visual Studio, notamment l' Explorateur de solutions, ne disposent d'aucun objet Automation explicite que vous puissiez utiliser pour manipuler leur contenu. Toutefois, ces fenêtres Outil disposent d'une arborescence, c'est-à-dire d'une vue hiérarchique des différents nœuds de type plan, accessible par programme. L'objet UIHierarchy représente les arborescences affichées dans ces fenêtres Outil, et vous permet d'itérer en leur sein et d'afficher le contenu de leurs nœuds.
Nom de l'objet |
Description |
---|---|
Objet UIHierarchy |
Représente l'arborescence dans la fenêtre Outil spécifiée. |
Collection UIHierarchyItems |
Représente tous les nœuds de l'arborescence. |
Objet UIHierarchyItem |
Représente un seul nœud de l'arborescence. |
À l'aide de ces objets et collections, vous pouvez :
sélectionner (à l'unité ou par lot) et afficher des nœuds présents dans l'arborescence ;
faire monter ou descendre le point d'insertion dans l'arborescence ;
retourner la valeur de l'élément sélectionné ou lui faire exécuter son action par défaut.
L'objet ToolWindows (qui est également retourné par ToolWindows) facilite le référencement des différentes fenêtres Outil dans Visual Studio. Par exemple, plutôt que d'utiliser _applicationObject.Windows.Item(EnvDTE.Constants.vsWindowKindOutput), vous pouvez désormais utiliser _applicationObject.ToolWindows.OutputWindow.
Notes
Les boîtes de dialogue et les commandes de menu qui s'affichent peuvent être différentes de celles qui sont décrites dans l'aide, en fonction de vos paramètres actifs ou de l'édition utilisée.Ces procédures ont été développées avec les paramètres de développement généraux actifs.Pour modifier vos paramètres, sélectionnez Importation et exportationde paramètres dans le menu Outils.Pour plus d'informations, consultez Paramètres Visual Studio.
Exemple
Bien que l'objet UIHierarchy représente le contenu de la quasi-totalité des fenêtres Outil dotées d'une arborescence, notamment l' Explorateur de solutions, la fenêtre Outil en soi reste un objet Window. La propriété UIHierarchyItems retourne la collection de nœuds de niveau supérieur de la fenêtre Outil spécifiée. L'Explorateur de solutions ne présente qu'un seul nœud de niveau supérieur ; la solution. Par conséquent, les nœuds de projet pour cette fenêtre particulière figure dans la collection du nœud de niveau supérieur, plutôt que dans la collection UIHierarchyItems de la fenêtre.
Sachant cela, il existe deux moyens d'accéder à un nœud particulier (UIHierarchyItem) dans une arborescence :
En utilisant la méthode GetItem pour référencer directement le nœud désiré à l'aide d'un modèle de solution/projet/élément.
En utilisant UIHierarchyItems.Item.UIHierarchyItems... (un modèle de collection/élément/collection).
Pour descendre davantage dans la hiérarchie d'un nœud, il vous suffit d'utiliser ce même modèle. Par exemple, vous utiliseriez UIHierarchy.UIHierarchyItems.Item(1).UIHierarchyItems.Item(2) pour naviguer jusqu'à un nœud subordonné au nœud de niveau supérieur.
Vous trouverez ci-dessous des exemples d'utilisation de ces deux techniques pour accéder à un nœud de niveau inférieur.
Ces exemples de compléments montrent comment référencer et utiliser les différents membres du modèle Automation UIHierarchy pour répertorier tous les éléments dans l' Explorateur de solutions.
Le premier exemple utilise la méthode GetItem pour accéder au contenu du nœud Références dans l'Explorateur de solutions. Pour plus d'informations sur l'exécution du code complémentaire, consultez Comment : compiler et exécuter les exemples de code du modèle objet Automation.
Notes
L'exemple de l' Explorateur de solutions envoie ses données à un message.
Imports System.Text
Public Sub OnConnection(ByVal application As Object, ByVal _
connectMode As ext_ConnectMode, ByVal addInInst As Object, _
ByRef custom As Array) Implements IDTExtensibility2.OnConnection
_applicationObject = CType(application, DTE2)
_addInInstance = CType(addInInst, AddIn)
listSlnExpNodes(_applicationObject)
End Sub
Sub listSlnExpNodes(dte as DTE2)
' Requires reference to System.Text for StringBuilder.
Dim UIH As UIHierarchy = dte.ToolWindows.SolutionExplorer
' Set a reference to the first level nodes in Solution Explorer.
' Automation collections are one-based.
Dim UIHItem As UIHierarchyItem = _
UIH.GetItem("MyAddin1\MyAddin1\References")
Dim file As UIHierarchyItem
Dim sb As New StringBuilder
' Iterate through first level nodes.
For Each file In UIHItem.UIHierarchyItems
sb.AppendLine(file.Name)
' Iterate through second level nodes (if they exist).
Dim subitem As UIHierarchyItem
For Each subitem In file.UIHierarchyItems
sb.AppendLine(" " & subitem.Name)
Next
Next
MsgBox(sb.ToString)
End Sub
using System.Text;
public void OnConnection(object application, ext_ConnectMode _
connectMode, object addInInst, ref Array custom)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
listSlnExpNodes(_applicationObject);
}
public void listSlnExpNodes(DTE2 dte)
{
// Requires reference to System.Text for StringBuilder.
UIHierarchy UIH = dte.ToolWindows.SolutionExplorer;
// Set a reference to the first level nodes in Solution Explorer.
// Automation collections are one-based.
UIHierarchyItem UIHItem =
UIH.GetItem("MyAddin1\\MyAddin1\\References");
StringBuilder sb = new StringBuilder();
// Iterate through first level nodes.
foreach ( UIHierarchyItem file in UIHItem.UIHierarchyItems )
{
sb.AppendLine(file.Name);
// Iterate through second level nodes (if they exist).
foreach ( UIHierarchyItem subitem in file.UIHierarchyItems )
{
sb.AppendLine(" "+subitem.Name);
}
}
MessageBox.Show(sb.ToString());
}
L'exemple suivant montre comment utiliser UIHierarchy pour répertorier le contenu de l'arborescence de la fenêtre Explorateur de solutions.
Sub cvTreeView()
Dim uih As UIHierarchy = DTE.ToolWindows.SolutionExplorer
Dim uihItem As UIHierarchyItem
Dim uihItems As UIHierarchyItems = uih.UIHierarchyItems
Dim msg As String
For Each uihItem In uihItems
msg += uihItem.Name & vbCr
Next
MsgBox(msg)
End Sub
Voir aussi
Tâches
Comment : contrôler l'Explorateur de solutions
Comment : modifier les caractéristiques d'une fenêtre
Concepts
Graphique Modèle d'objet Automation
Autres ressources
Création et contrôle de fenêtres d'environnement