Я хотел бы создать расширение VS, в котором мне нужно знать номер строки, в которой было вызвано меню. Я нашел реализацию VisualBasic с макросом, который кажется сделать это, но я не знаю, как это сделать на C#. Цель состоит в том, чтобы узнать точный номер строки, на которой был вызван ContextMenu
, чтобы поместить на нее значок-заполнитель, как точку останова. Полезные ссылки приветствуются, так как я не смог найти много по этой теме.
Расширение Visual Studio: как получить строку, в которой было вызвано контекстное меню?
Ответы (1)
Вы можете создать проект 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);
}
person
Weiwei
schedule
06.09.2017
EnvDTE.TextSelection ts = DTE.ActiveWindow.Selection as EnvDTE.TextSelection;
выдает ошибку: Для нестатического поля, метода или свойства '_DTE.ActiveWindow' требуется ссылка на объект. - person rTECH   schedule 02.09.2017