我如何在 Visual Studio 2017 VSIX C# 项目中使用 enable/disable 命令
How can I enable/disable command in Visual Studio 2017 VSIX C# project
我正在使用 C# VSIX 项目开发 Visual Studio 2017 的扩展。
我需要根据 .ini 文件中的设置创建数量可变的命令。
我想创建最大数量的命令(因为在 VSIX 项目中每个命令都需要一个新的 .cs 文件),
并仅启用 .ini 文件中写入的命令。不幸的是我不知道如何禁用命令。当布尔值变为真时,我需要启用命令。
我发现我需要使用 OleMenuCommand class,但我没有 Initialize() 和 StatusQuery() 方法。如何动态启用我的命令?
当您创建一个 OleMenuCommand to add with OleMenuCommandService, you can subscribe to the BeforeQueryStatus 事件并在其中动态 enable/disable 命令时:
private void OnQueryStatus(object sender)
{
Microsoft.VisualStudio.Shell.OleMenuCommand menuCommand =
sender as Microsoft.VisualStudio.Shell.OleMenuCommand;
if (menuCommand != null)
menuCommand.Visible = menuCommand.Enabled = MyCommandStatus();
}
要在 Visual Studio 中执行 enable/disable 命令,您可以订阅 OleMenuCommand
的 BeforeQueryStatus
事件:
myOleMenuCommand.BeforeQueryStatus += QueryCommandHandler;
private void QueryCommandHandler(object sender)
{
var menuCommand = sender as Microsoft.VisualStudio.Shell.OleMenuCommand;
if (menuCommand != null)
menuCommand.Visible = menuCommand.Enabled = MyCommandStatus();
}
MyCommandStatus()
方法的可能实现可以是:
public bool MyCommandStatus()
{
// do this if you want to disable your commands when the solution is not loaded
if (false == mDte.Solution.IsOpen)
return false;
// do this if you want to disable your commands when the Visual Studio build is running
else if (true == VsBuildRunning)
return false;
// Write any condition here
return true;
}
我正在使用 C# VSIX 项目开发 Visual Studio 2017 的扩展。 我需要根据 .ini 文件中的设置创建数量可变的命令。 我想创建最大数量的命令(因为在 VSIX 项目中每个命令都需要一个新的 .cs 文件), 并仅启用 .ini 文件中写入的命令。不幸的是我不知道如何禁用命令。当布尔值变为真时,我需要启用命令。
我发现我需要使用 OleMenuCommand class,但我没有 Initialize() 和 StatusQuery() 方法。如何动态启用我的命令?
当您创建一个 OleMenuCommand to add with OleMenuCommandService, you can subscribe to the BeforeQueryStatus 事件并在其中动态 enable/disable 命令时:
private void OnQueryStatus(object sender)
{
Microsoft.VisualStudio.Shell.OleMenuCommand menuCommand =
sender as Microsoft.VisualStudio.Shell.OleMenuCommand;
if (menuCommand != null)
menuCommand.Visible = menuCommand.Enabled = MyCommandStatus();
}
要在 Visual Studio 中执行 enable/disable 命令,您可以订阅 OleMenuCommand
的 BeforeQueryStatus
事件:
myOleMenuCommand.BeforeQueryStatus += QueryCommandHandler;
private void QueryCommandHandler(object sender)
{
var menuCommand = sender as Microsoft.VisualStudio.Shell.OleMenuCommand;
if (menuCommand != null)
menuCommand.Visible = menuCommand.Enabled = MyCommandStatus();
}
MyCommandStatus()
方法的可能实现可以是:
public bool MyCommandStatus()
{
// do this if you want to disable your commands when the solution is not loaded
if (false == mDte.Solution.IsOpen)
return false;
// do this if you want to disable your commands when the Visual Studio build is running
else if (true == VsBuildRunning)
return false;
// Write any condition here
return true;
}