Как добавить заголовок панели команд строки Excel с текстом и значком, используя C#
Мне нужно добавить заголовок группы в командной строке 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 ответ
Согласно 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);
}