Как добавить заголовок панели команд строки Excel с текстом и значком, используя C # - PullRequest
0 голосов
/ 25 января 2019

Мне нужно добавить заголовок группы в командной строке Excel во время выполнения, используя C #, чтобы я мог отделить свои параметры Office.CommandBarButton от параметров Excel по умолчанию. Например, в Excel 2013, если вы выберете строку и нажмите RMB (правая кнопка мыши), будет отображаться панель команд по умолчанию со многими параметрами. Вы заметите, что есть заголовок «Параметры вставки» со стандартным значком вставки слева. Я хочу создать аналогичный заголовок (группу), например "Параметры вставки:", используя C #.

Кстати, я использую следующий пример кода для успешного добавления нескольких параметров Office.CommandBarButton в Excel;

    private void AddMyRowMenu() 
    {
       Office.CommandBars commandBars = null;
       Office.CommandBar commandBarRowMenu = null;
       Office.CommandBarButton commandBarButtonMyOptions1;
       try
       {
           commandBarRowMenu = commandBars["Row"];
           commandBarButtonMyOptions1 = (Office.CommandBarButton)commandBarRowMenu.Controls["My Option 1"];
       }
       catch (ArgumentException)
       {
           commandBarButtonMyOptions1 = (Office.CommandBarButton)commandBarRowMenu.Controls.Add(Office.MsoControlType.msoControlButton, oMissing, oMissing, oMissing, oMissing);
           commandBarButtonMyOptions1.BeginGroup = true;
           commandBarButtonMyOptions1.Caption = "My Option 1";
       }
       commandBarButtonMyOptions1.Click += new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(commandBarButtonMyOptions1_Click);
    }

Я добавляю 3 параметра Office.CommandBarButton, используя приведенный выше код, и для ясности необходимо отделить их от параметров по умолчанию для Excel RMB.

1 Ответ

0 голосов
/ 05 февраля 2019

Согласно Microsoft, для работы с https://docs.microsoft.com/en-us/office/vba/api/office.msocontroltype доступно только ограниченное количество типов элементов управления. Ниже приведен пример кода, используемого для реализации контекстного меню:

private void AddMyRowMenu2() 
{
   Office.CommandBars commandBars = null;
   Office.CommandBar commandBarRowMenu = null;
   Office.CommandBarPopup commandBarRowPopupMenu = null;
   Office.CommandBarButton commandBarButtonMyOptions1 = null;
   Office.CommandBarButton commandBarButtonMyOptions2 = null;
   try
   {
       commandBars = (Office.CommandBars)Application.GetType().InvokeMember("CommandBars", System.Reflection.BindingFlags.GetProperty, null, Application, new object[] { });
       commandBarRowMenu = commandBars["Row"];
       commandBarRowPopupMenu = (Office.CommandBarPopup)commandBarRowMenu.Controls.Add(Office.MsoControlType.msoControlPopup, oMissing, oMissing, oMissing, oMissing);
       commandBarRowPopupMenu.Caption = "My Popup Menu 1";
       commandBarButtonMyOptions1 = (Office.CommandBarButton) commandBarRowPopupMenu.Controls.Add(Office.MsoControlType.msoControlButton, oMissing, oMissing, oMissing, oMissing);
       commandBarButtonMyOptions1.Caption = "My Button Option 1";
       commandBarButtonMyOptions2 = (Office.CommandBarButton) commandBarRowPopupMenu.Controls.Add(Office.MsoControlType.msoControlButton, oMissing, oMissing, oMissing, oMissing);
       commandBarButtonMyOptions2.Caption = "My Button Option 2";
   }
   catch (ArgumentException ex)
   {
       MessageBox.Show(ex.Message, "Test Menu Items", MessageBoxButtons.OK, MessageBoxIcon.Warning);
   }
   commandBarButtonMyOptions1.Click += new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(commandBarButtonMyOptions1_Click);
   commandBarButtonMyOptions2.Click += new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(commandBarButtonMyOptions2_Click);
}
...