Bonjour,
je développe actuellement un Addin pour Visual Studio 2005 pour une utilisation interne à ma boite.
Seulement j'ai 2 problèmes,
le premier c'est que je voudrais avoir un meilleur contrôle de la fenêtre "explorateur de solution".
J'arrive à obtenir un EnvDTE.Window (ou EnvDTE80.Window2) représentant la fenêtre et donnant accès a des fonctionnalités générques telles que afficher, masquer, fermer, ...
J'arrive également à obtenir un UIHierarchy donnant accès à l'arbre interne.
Les éléments de l'arbres sont sélectionnables, je peux obtenir le EnvDTE.Project ou EnvDTE.ProjectItem qui se cache derrière le UIHierarchyItem, ou encore ouvrir/fermer les noeuds.
Mais ca s'arrête la, moi je voudrais pouvoir afficher/masquer des noeuds, changer leurs icones ou à défaut en ajouter une de plus, connaitre les noeuds qui représentent un projet déchargé, ...
Je ne trouve rien pour faire ca. J'ai déjà vu des captures d'écran montrant un explorateur de solution qui affichait une icone devant chaque noeud (en plus de l'icone de base évidemment) donc je sais que c'est possible.
Si vous avez une idée, une piste de recherche, voire carrément un exemple, ca serait très sympas de m'en faire profiter.
Mon second problème concerne toujours l'explorateur de solution. Celui-ci possède une barre de commande avec des bouttons (tels que "propriétés", "rafraichir", "Afficher tous les fichiers", ...). J'ai ajouté dans cette barre d'outil un bouton, créé à partir d'une commande :
Pour info, la fonction "MakeOrGetCommand" est de ma création, elle créer une commande temporaire (supprimée en quittant studio) ou l'obtient si celle-ci existe déjà. "_CommandBarsCreated" est une stack qui me permet, au déchargement de l'addin de m'assurer de la suppression des éléments ajouté par mon addin (j'utilise une stack comme ca je delete les éléments dans l'ordre inverse de leurs création, ca évite de delete un parent sans avoir delete les enfants).
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 // Création de la commande Command cmdMaCommand = MakeOrGetCommand("MaCommande", "Une commande a moi", "Une commande a moi que c'est la mienne.", 59); // Obtient la barre de menu de l'explorer de solution try { Window2 wnd = (Window2)_applicationObject.Windows.Item(Constants.vsext_wk_SProjectWindow); CommandBars cmdBarsSolutionExplorer = (CommandBars)wnd.CommandBars; if (cmdBarsSolutionExplorer.Count > 0) { CommandBarButton cbbMonBouton = (CommandBarButton)cmdMaCommand.AddControl(cmdBarsSolutionExplorer.ActiveMenuBar, cmd BarsSolutionExplorer.ActiveMenuBar.Controls.Count + 1); cbbMonBouton.Visible = true; cbbMonBouton.Style = MsoButtonStyle.msoButtonIcon; _CommandBarsCreated.Push(cbbMonBouton); } } catch (Exception ex) { }
Le problème est que je n'arrive pas à supprimer le bouton ajouté de cette mannière. Si je décharge l'addin il reste présent dans l'interface, si je fait un Delete() dessus ca lance une exception. Comment je peux faire pour supprimer ce bouton au déchargement de l'addin ?
Partager