Excel VSTO addin, пользовательское всплывающее меню при щелчке правой кнопкой мыши с использованием ленты XML - PullRequest
0 голосов
/ 27 ноября 2018

В моем надстройке VSTO я открываю пользовательское меню, если кто-то щелкает правой кнопкой мыши по ячейке, содержащей действительный CUSIP облигации (жаргон финансовой индустрии для идентификатора облигации).Метод ниже выполняет это с помощью CommandBars.У меня вопрос, как сделать то же самое, используя определения ленты XML.Вот текущий код с использованием командных панелей (работает нормально):

    private static Office.CommandBar cbBondPopup = null;
    private void Application_SheetBeforeRightClick(object Sh, Excel.Range Target, ref bool Cancel)
    {
        Cancel = false; // overridden to true by btn1, btn2, btn3 handlers below (so that Excel Cell Menu is cancelled)
        if (IsBondCusip(this.Application.ActiveCell.Value2))
        {
            if (cbBondPopup == null && IsBondCusip(this.Application.ActiveCell.Value2))
            {
                // create command bar if nec
                cbBondPopup = this.Application.CommandBars.Add(Name: "BondMenu", Position: Office.MsoBarPosition.msoBarPopup, Temporary: true);
                // define 3 custom buttons
                var btn1 = (Office.CommandBarButton)cbBondPopup.Controls.Add(Type: Office.MsoControlType.msoControlButton, Temporary: true);
                var btn2 = (Office.CommandBarButton)cbBondPopup.Controls.Add(Type: Office.MsoControlType.msoControlButton, Temporary: true);
                var btn3 = (Office.CommandBarButton)cbBondPopup.Controls.Add(Type: Office.MsoControlType.msoControlButton, Temporary: true);
                btn1.Caption = "Bond Summary"; btn2.Caption = "Bond Details"; btn3.Caption = "Find Similar Bonds";
                // connect buttons to handlers ==> CmdBarEventHndlr(CommandBarButton Ctrl, ref bool Cancel)
                btn1.Click += Click_BondSummary; btn2.Click += Click_BondDetails; btn3.Click += Click_FindSimilarBonds;
            }
            cbBondPopup.ShowPopup(); // pop bond menu (handlers set Cancel to true so Excel Cell Menu is cancelled unless user hits ESC)
        }
    }

Далее приведены те же кнопки, определенные в синтаксисе ленты XLM.В этом случае методы onAction имеют другую подпись - например, Click_BondSummary (Office.IRibbonControl ctrl).

    <button id="btnBondSummary" label="BondSummary" onAction="Click_BondSummary"/>
    <button id="btnBondDetails" label="BondDetails" onAction="Click_BondDetails"/>
    <button id="btnFindBonds"   label="FindBonds"   onAction="Click_FindSimilarBonds"/>

Я надеялся, что смогу просто поместить эти определения в контекстное меню XML и вставить его.Установив idMso = "ContextMenuCell", я могу заставить кнопки отображаться в самом меню Excel Cell - но это не то, что я хочу.Я хочу, чтобы они появлялись в своем отдельном всплывающем меню.

ВОПРОС: Есть ли способ переписать мой обработчик щелчка правой кнопкой мыши, используя определения кнопок ленты XML вместо панелей команд?(В противном случае мне нужно два определения всего - одно для ленты и одно для всплывающей панели команд).

...