【问题标题】:Visual Studio Extension: How to get the line on which Context Menu was called?Visual Studio 扩展:如何获取调用上下文菜单的行?
【发布时间】:2017-09-01 19:11:01
【问题描述】:

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

【问题讨论】:

  • 你能举例说明如何使用它吗?通过链接实际提供的示例的第一行 EnvDTE.TextSelection ts = DTE.ActiveWindow.Selection as EnvDTE.TextSelection; 给了我错误:非静态字段、方法或属性“_DTE.ActiveWindow”需要对象引用
  • 要获取 DTE 对象,请参阅 stackoverflow.com/questions/19087186/…
  • 我根据 Sergey Vlasov 的建议创建了一个示例,它可以返回代码编辑器中光标所在的行号。您只需要使用“DTE dte = (DTE)this.ServiceProvider.GetService(typeof(DTE));”获取 DTE 值在 VSIX 项目中并将 DTE.ActiveWindow 替换为 dte.ActiveWindow。如有任何问题,请随时告诉我们。
  • 感谢你们两位,它运行良好。如果你们中的任何人将 cmets 转换为正确的答案,以便其他人更容易找到它,我很乐意将其标记为答案/upvote!

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


【解决方案1】:

您可以创建一个 VSIX 项目并在您的项目中添加一个命令项。然后在 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);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 2021-11-26
    • 2023-03-19
    • 2020-05-31
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多