Visual Studio扩展:如何获取调用上下文菜单的行?

时间:2017-09-01 19:11:02

标签: c# editor visual-studio-2017 visual-studio-extensions line-numbers

我想创建一个VS扩展,我需要知道调用该菜单的行号。我找到了一个带有似乎的宏的VisualBasic implementation来执行此操作,但我不知道如何在C#中启动它。目标是知道调用ContextMenu的行的确切数量,以便在其上放置占位符图标,就像断点一样。有用的链接很受欢迎,因为我在这个主题上找不到太多。

1 个答案:

答案 0 :(得分:3)

您可以创建一个VSIX项目并在项目中添加一个Command项。然后在MenuItemCallback()方法中添加以下代码以获取代码行号。

    private void MenuItemCallback(object sender, EventArgs e)
    {
        EnvDTE.DTE dte = (EnvDTE.DTE)this.ServiceProvider.GetService(typeof(EnvDTE.DTE));

        EnvDTE.TextSelection ts = dte.ActiveWindow.Selection as EnvDTE.TextSelection;
        if (ts == null)
            return;
        EnvDTE.CodeFunction func = ts.ActivePoint.CodeElement[vsCMElement.vsCMElementFunction]
                    as EnvDTE.CodeFunction;
        if (func == null)
            return;

        string message = dte.ActiveWindow.Document.FullName + System.Environment.NewLine +
          "Line " + ts.CurrentLine + System.Environment.NewLine +
          func.FullName;

        string title = "GetLineNo";

        VsShellUtilities.ShowMessageBox(
            this.ServiceProvider,
            message,
            title,
            OLEMSGICON.OLEMSGICON_INFO,
            OLEMSGBUTTON.OLEMSGBUTTON_OK,
            OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST);
    }