2009-07-15 8 views
2

J'ai utilisé avec succès les modèles Excel et Word addin dans Visual Studio 2008 pour créer un projet qui s'ajoute au ruban, mais j'ai des difficultés avec les addins partagés. J'ai créé un add-in qui utilise un fichier xml pour modifier et ajouter au ruban et je peux attraper les événements des boutons ajoutés, mais je ne peux pas pour la vie de moi comprendre comment cacher les boutons ou ajouter des contrôles une fois qu'il est opérationnel. Fondamentalement, j'ai besoin d'une sorte de référence à un ruban et tout ce que je peux obtenir est une référence à un objet qui implémente IRibbonUi qui n'aide pas. Quelqu'un a-t-il de bons exemples ou conseils complémentaires?VSTO - Addin partagé pour Word et Excel pour modifier le ruban

Répondre

2

Il existe deux façons de contrôler la visibilité de vos contrôles de ruban. Vous pouvez utiliser la propriété visible ou l'événement getVisible. Les deux approches nécessitent de modifier le fichier XML que vous utilisez déjà.

Si ceci est votre fichier xml partielle maintenant:

<button id="MyButton" label="Hello" onAction="MyButtonOnAction"/> 

Ensuite, vous pouvez masquer le contrôle en changeant à:

<button id="MyButton" label="Hello" onAction="MyButtonOnAction" visible="false"/> 

Ce n'est pas très comme il est codé en dur. Pour se rapprocher de ce que vous cherchez un changement xml à:

<button id="MyButton" label="Hello" onAction="MyButtonOnAction" getVisible="MyButtonGetVisible"/> 

Et de la même manière que vous avez fait le rappel de MyButtonOnAction vous créez le rappel MyButtonGetVisible qui arrive à avoir cette signature (C#):

bool MyButtonGetVisible(IRibbonControl control) 

Avec cette méthode, vous pouvez alors renvoyer true ou false selon que vous souhaitez afficher/masquer le bouton. La prochaine question que vous pourriez avoir est, le rappel MyButtonGetVisible est seulement jamais appelé une fois juste après que mon complément est chargé. Je veux montrer/cacher le bouton plus tard, comment puis-je déclencher le rappel? Pour ce faire, vous pouvez utiliser cet objet IRibbonUI et appeler la fonction Invalidate qui provoquera l'invalidation de tout le ruban, ce qui provoquera l'appel du rappel. Si vous avez besoin d'un contrôle plus fin, vous pouvez appeler la fonction InvalidateControl qui prend le ControlID en paramètre et invalidera seulement un contrôle, ce qui provoquera l'appel du callback. En ce qui concerne l'ajout de contrôles à la volée, je ne crois pas que cela soit possible.

D'autres ressources: je suggère Part 1 Part 2 Part 3

+0

Merci, ce rappel GetVisible combinée à l'appel InvalidateControl était exactement ce que nous avons fini par faire. La seule souffrance à la fin est que lorsque nous surpassons le bouton de fichier ouvert, le raccourci ctrl-o appelle notre code en mots, mais pas dans Excel. Le mieux que nous puissions trouver est que l'équipe Excel n'a pas implémenté cela. – Codezy

Questions connexes