У меня есть приложение VSTO в качестве надстройки для MS Word, и я хочу установить сочетания клавиш для кнопок ленты - PullRequest
5 голосов
/ 14 апреля 2010

Когда я разрабатывал это приложение (в C # Visual Studio 2008), я задал тот же вопрос (на самом деле мне удалось найти ответ на форуме MS, за который я заслуживаю какой-то приз). Ответ от MS состоял в том, что единственный способ установить сочетания клавиш для ваших собственных методов - это написать макрос, который вызывает метод (очевидно, через COM) и установить ярлык для вызова этого макроса.

Это действительно не тот ответ, который я хочу услышать. VSTO позволяет создать действительно красивое приложение с очень хорошим использованием ленты и т. Д., Но затем вам нужно разобраться с этим в COM и встроить в него другой интерфейс с помощью макросов. Что, помимо того, что является пустой тратой времени, полностью обходит всю безопасность, встроенную в MS для поддержки надстроек VSTO.

У меня такой вопрос: действительно ли это необходимо (все, что связано с COM / макросом), или есть способ, которым я могу назначить сочетание клавиш для своих собственных элементов ленты? Word 2007? Word 2010?

Спасибо

Ответы [ 2 ]

8 голосов
/ 23 марта 2012

Слишком поздно отвечать, но стоит поделиться.

Я использовал сочетания клавиш в своем проекте. По сути, эта комбинация клавиш должна содержать форму WPF с именем SignOff. Эту форму WPF можно отобразить, нажав кнопку на вкладке ленты или используя сочетание клавиш (Ctrl + Shift + S).

Есть четыре места, где мне нужно написать свой код.

  1. Метод действия для кнопки ленты, вызываемой по событию щелчка.

    public void btnInsertSignoff_Click(IRibbonControl control) 
    {
      InsertSignoff();//This method displays the sign off form 
    }
    
  2. Следующий код связывает сочетание клавиш с кодом VBA в событии Addin Startup / Document Change

     private void ThisAddIn_Startup(object sender, System.EventArgs e)
     {
      Globals.ThisAddIn.Application.KeyBindings.Add(WdKeyCategory.wdKeyCategoryCommand,    "InsertSignOff ", Globals.ThisAddIn.Application.BuildKeyCode(WdKey.wdKeyControl,   WdKey.wdKeyShift, WdKey. wdKeyS));
     }
    

Эта ссылка показывает, как вызывать код VBA с помощью сочетаний клавиш. http://www.wordbanter.com/showthread.php?t=31813

Я последовал этому примеру, но вместо VBA я сделал это в VSTO Addin Startup, но второй параметр «InsertSignOff» - это метод VBA на шаге 4.

  1. Написал еще один метод, который называется InsertSignOff (после предоставления метода VSTO VBA).

    [ComVisible(true)]
    public interface IAddInAdapter 
    {
       void InsertSignOff ();
    }
    
    
    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.None)]
    public class AddinAdapter : IAddInAdapter
    {
       public void InsertSignOff()
       {
          InsertSignoff();//This method displays the sign off form
       }
    }
    

Эта ссылка объясняет, как предоставить VSTO-код VBA http://msdn.microsoft.com/en-us/library/bb608604.aspx

  1. Создан файл .dotm в расположении пользовательских шаблонов «C: \ Users \\ AppData \ Roaming \ Microsoft \ Templates», который содержит следующий код VBA

    Sub InsertSignOff ()
        Dim addIn As COMAddIn
        Dim automationObject As Object
        Set addIn = Application.COMAddIns("Wordaddin.AddinAdapter")
        Set automationObject = addIn.Object
        automationObject.InsertSignOff  
    End Sub
    

Надеюсь, это кому-нибудь поможет.

1 голос
/ 23 января 2015

Вы можете использовать метод подключения глобального ключа, упомянутый здесь: http://blogs.msdn.com/b/vsod/archive/2010/04/09/using-shortcut-keys-to-call-a-function-in-an-office-add-in.aspx

...