Добавление контекстного меню в окне инструментов
Область применения:Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
В этом пошаговом руководстве контекстное меню помещается в окно инструментов. Контекстное меню — это меню, которое отображается, когда пользователь щелкает правой кнопкой мыши кнопку, текстовое поле или фон окна. Команды в контекстном меню ведут себя так же, как команды в других меню или панели инструментов. Чтобы поддерживать контекстное меню, укажите его в VSCT-файле и отобразите его в ответ на щелчк мыши правой кнопкой мыши.
Окно инструментов состоит из пользовательского элемента управления WPF в пользовательском классе окна инструментов, наследуемом от ToolWindowPane.
В этом пошаговом руководстве показано, как создать контекстное меню в виде меню Visual Studio, объявив элементы меню в VSCT-файле, а затем с помощью управляемой платформы пакетов для реализации их в классе, определяющем окно инструментов. Этот подход упрощает доступ к командам Visual Studio, элементам пользовательского интерфейса и объектной модели автоматизации.
Кроме того, если контекстное меню не будет получать доступ к функциям Visual Studio, можно использовать ContextMenu свойство элемента XAML в пользовательском элементе управления. Дополнительные сведения см. в разделе ContextMenu.
Необходимые компоненты
Начиная с Visual Studio 2015, пакет SDK Visual Studio не устанавливается из центра загрузки. Она включена в качестве необязательной функции в настройке Visual Studio. Пакет SDK для VS можно установить и позже. Дополнительные сведения: Установка пакета SDK для Visual Studio.
Создание пакета контекстного меню окна средства
- Создайте проект VSIX с именем TWShortcutMenu и добавьте в него шаблон окна инструментов с именем ShortcutMenu . Дополнительные сведения о создании окна инструментов см. в статье «Создание расширения с помощью окна инструментов».
Указание контекстного меню
Контекстное меню, например в этом пошаговом руководстве, позволяет пользователю выбрать из списка цветов, которые используются для заполнения фона окна инструмента.
-
В Контекстном меню.vsct найдите элемент GuidSymbol с именем guidShortcutMenuPackageCmdSet и объявите контекстное меню, группу контекстного меню и параметры меню. Теперь элемент GuidSymbol должен выглядеть следующим образом:
// your GUID here
public const string guidShortcutMenuPackageCmdSet = "00000000-0000-0000-0000-00000000"; // your GUID will differ public const int ColorMenu = 0x1000; public const int cmdidRed = 0x102; public const int cmdidYellow = 0x103; public const int cmdidBlue = 0x104;
Реализация контекстного меню
В этом разделе реализовано контекстное меню и его команды.
- В ЯрлыкМену.cs окно инструментов может получить службу команд меню, но элемент управления, содержащий его, не может. Ниже показано, как сделать командную службу меню доступной для пользовательского элемента управления.
- В ShortcutMenu.cs добавьте следующие директивы using:
using Microsoft.VisualStudio.Shell; using System.ComponentModel.Design;
protected override void Initialize()
public ShortcutMenu() : base(null)
public ShortcutMenuControl(OleMenuCommandService service) < this.InitializeComponent(); commandService = service; if (null !=commandService) < // Create an alias for the command set guid. Guid guid = new Guid(ShortcutMenuCommand.guidShortcutMenuPackageCmdSet); // Create the command IDs. var red = new CommandID(guid, ShortcutMenuCommand.cmdidRed); var yellow = new CommandID(guid, ShortcutMenuCommand.cmdidYellow); var blue = new CommandID(guid, ShortcutMenuCommand.cmdidBlue); // Add a command for each command ID. commandService.AddCommand(new MenuCommand(ChangeColor, red)); commandService.AddCommand(new MenuCommand(ChangeColor, yellow)); commandService.AddCommand(new MenuCommand(ChangeColor, blue)); >>
ShortcutMenu
private void MyToolWindow_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
using Microsoft.VisualStudio.Shell; using System.ComponentModel.Design; using System; using System.Windows.Input; using System.Windows.Media;
private void MyToolWindow_MouseRightButtonDown(object sender, MouseButtonEventArgs e) < if (null != commandService) < CommandID menuID = new CommandID( new Guid(ShortcutMenuCommand.guidShortcutMenuPackageCmdSet), ShortcutMenuCommand.ColorMenu); Point p = this.PointToScreen(e.GetPosition(this)); commandService.ShowContextMenu(menuID, (int)p.X, (int)p.Y); >>
private void ChangeColor(object sender, EventArgs e) < var mc = sender as MenuCommand; switch (mc.CommandID.ID) < case ShortcutMenuCommand.cmdidRed: MyToolWindow.Background = Brushes.Red; break; case ShortcutMenuCommand.cmdidYellow: MyToolWindow.Background = Brushes.Yellow; break; case ShortcutMenuCommand.cmdidBlue: MyToolWindow.Background = Brushes.Blue; break; >>
Проверка возможностей окна инструментов
- Выполните сборку решения и запустите отладку. Откроется экспериментальный экземпляр.
- В экспериментальном экземпляре нажмите кнопку «Вид/ Другие окна«, а затем нажмите кнопку «ЯрлыкМеню«. Это должно отобразить окно средства.
- Щелкните правой кнопкой мыши текст окна инструментов. Контекстное меню со списком цветов должно отображаться.
- Щелкните цвет в контекстном меню. Цвет фона окна инструментов должен быть изменен на выбранный цвет.
См. также
- Команды, меню и панели инструментов
- Использование и предоставление служб
Практическое руководство. Добавление и удаление элементов меню с помощью компонента ContextMenu в Windows Forms
Объясняется, как добавлять и удалять элементы контекстного меню в Windows Forms.
Компонент ContextMenu в Windows Forms предоставляет меню часто используемых команд, относящихся к выбранному объекту. Элементы можно добавлять в контекстное меню, добавляя объекты MenuItem в коллекцию MenuItems.
Элементы можно удалять из контекстного меню окончательно. Однако во время выполнения может быть удобнее скрывать или отключать их.
Хотя элементы управления MenuStrip и ContextMenuStrip заменяют элементы управления MainMenu и ContextMenu предыдущих версий и расширяют их функциональные возможности, элементы управления MainMenu и ContextMenu сохраняются для обратной совместимости и возможного применения в будущем.
Удаление элементов из контекстного меню
- Чтобы удалить определенный элемент меню, используйте метод Remove или RemoveAt коллекции MenuItems компонента ContextMenu.
' Removes the first item in the shortcut menu. ContextMenu1.MenuItems.RemoveAt(0) ' Removes a particular object from the shortcut menu. ContextMenu1.MenuItems.Remove(mnuItemNew)
// Removes the first item in the shortcut menu. contextMenu1.MenuItems.RemoveAt(0); // Removes a particular object from the shortcut menu. contextMenu1.MenuItems.Remove(mnuItemNew);
// Removes the first item in the shortcut menu. contextMenu1->MenuItems->RemoveAt(0); // Removes a particular object from the shortcut menu. contextMenu1->MenuItems->Remove(mnuItemNew);
ContextMenu1.MenuItems.Clear()
contextMenu1.MenuItems.Clear();
contextMenu1->MenuItems->Clear();
См. также
- ContextMenu
- Компонент ContextMenu
- Общие сведения об элементе управления ContextMenu
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
.NET Desktop feedback
The .NET Desktop documentation is open source. Provide feedback here.
Обратная связь
Отправить и просмотреть отзыв по
Как добавить visual studio code в контекстное меню?
Подскажите пожалуйста, как добавить пункты visual studio code в контекстное меню? Чтобы по клику правой кнопки мыши можно было открыть файл или проект. Искал в настройках (старательно искал) — безуспешно. Заранее спасибо.
- Вопрос задан более трёх лет назад
- 22952 просмотра
1 комментарий
Простой 1 комментарий

https://github.com/Microsoft/vscode/issues/63714
В пути раздела command не должны использоваться переменные среды.
Решения вопроса 1

Math.random()
Вручную значит
https://remontka.pro/add-program-context-menu/
Ответ написан более трёх лет назад
Нравится 2 1 комментарий
hajdoz43 @hajdoz43 Автор вопроса
Ответы на вопрос 5

клацаю по кнопкам
Понимаю, что для автора уже не актуально, но может быть кому-то ещё поможет.
Создайте файл vsCodeOpenFolder.reg с этим контентом (если вы не выбрали путь установки по умолчанию, вам необходимо настроить пути в этом файле):
Windows Registry Editor Version 5.00 ; Open files [HKEY_CLASSES_ROOT\*\shell\Open with VS Code] @="Edit with VS Code" "Icon"="C:\\Program Files (x86)\\Microsoft VS Code\\Code.exe,0" [HKEY_CLASSES_ROOT\*\shell\Open with VS Code\command] @="\"C:\\Program Files (x86)\\Microsoft VS Code\\Code.exe\" \"%1\"" ; This will make it appear when you right click ON a folder ; The "Icon" line can be removed if you don't want the icon to appear [HKEY_CLASSES_ROOT\Directory\shell\vscode] @="Open Folder as VS Code Project" "Icon"="\"C:\\Program Files (x86)\\Microsoft VS Code\\Code.exe\",0" [HKEY_CLASSES_ROOT\Directory\shell\vscode\command] @="\"C:\\Program Files (x86)\\Microsoft VS Code\\Code.exe\" \"%1\"" ; This will make it appear when you right click INSIDE a folder ; The "Icon" line can be removed if you don't want the icon to appear [HKEY_CLASSES_ROOT\Directory\Background\shell\vscode] @="Open Folder as VS Code Project" "Icon"="\"C:\\Program Files (x86)\\Microsoft VS Code\\Code.exe\",0" [HKEY_CLASSES_ROOT\Directory\Background\shell\vscode\command] @="\"C:\\Program Files (x86)\\Microsoft VS Code\\Code.exe\" \"%V\""
Дважды щелкните его, чтобы создать записи в реестре
Если «Открыть с кодом» не отображается в контекстном меню «Проводник», необходимо перезагрузить систему.
Если вы используете 64-битную или инсайдерскую версию VS Code, измените путь соответственно
Как убрать вкладку «Открыть в Visual Studio» из контекстного меню?
Windows 10 Manager — утилита ContextMenuManager,
можно через утилиту удалить.
Ещё есть утилита shexview,но в связи с последними изменениями в 10ке 1803 ещё хз как она себя поведёт)))
Я к примеру отказался от обновления 1709 на 1803,у меня работает.
Высший разум (127008) 5 лет назад
работает на 1803
Александр ГригорьевУченик (90) 5 лет назад
А ты же профессиональный компьютерщик?
Галерный Искусственный Интеллект (111626) До «профессиональный компьютерщик» мне ДАЛЕКО, но пожалуй можно выразиться типа ПОЛУпрофессиональный компьютерщик)))
