如何从工具 window 访问当前代码编辑器?
How to access current code editor from tool window?
我目前正在尝试使用“Visual Studio 2015”为此创建一个扩展。
我想创建一个函数,在单击 ToolWindow 按钮时插入适合当前代码编辑器光标部分的源代码。
SDK 模板中有一个 ToolWindow 示例。
但是,它是在ToolWindow中完成的,并没有编写访问代码编辑器的方法。
如何从 ToolWindow 获取/设置当前代码编辑器源代码?
正如 Sergey 所建议的,我们可以使用 TextSelection.Text 属性.
但不知何故我未能以这种方式获得 VS2015 的选择:DTE.ActiveDocument.Selection
。
对于我来说,在 VS2015 中我创建了一个新的 custom Tool Window
项,在工具窗口中添加了一个简单的 TextBox
控件,然后双击默认的 Click me!
按钮导航到ToolWindow1Control.xaml.cs
文件中的 button-Click
方法,之后我添加如下代码以从文本框中获取文本并将其插入编辑器:
[SuppressMessage("Microsoft.Globalization", "CA1300:SpecifyMessageBoxOptions", Justification = "Sample code")]
[SuppressMessage("StyleCop.CSharp.NamingRules", "SA1300:ElementMustBeginWithUpperCaseLetter", Justification = "Default event handler naming pattern")]
private void button1_Click(object sender, RoutedEventArgs e)
{
string text = textBox.Text;
DTE dte = Package.GetGlobalService(typeof(DTE)) as DTE;
(dte.ActiveDocument.Selection as EnvDTE.TextSelection).Text = text;
}
所以对我来说,我实际上使用下面的代码来插入文本:
DTE dte = Package.GetGlobalService(typeof(DTE)) as DTE;
(dte.ActiveDocument.Selection as EnvDTE.TextSelection).Text = "Add your text here.";
另外:
要使用上面的代码,需要在ToolWindow1Control.xaml.cs
文件中添加定义:
using Microsoft.VisualStudio.Shell;
using EnvDTE;
希望对您有所帮助:)
我目前正在尝试使用“Visual Studio 2015”为此创建一个扩展。 我想创建一个函数,在单击 ToolWindow 按钮时插入适合当前代码编辑器光标部分的源代码。 SDK 模板中有一个 ToolWindow 示例。 但是,它是在ToolWindow中完成的,并没有编写访问代码编辑器的方法。 如何从 ToolWindow 获取/设置当前代码编辑器源代码?
正如 Sergey 所建议的,我们可以使用 TextSelection.Text 属性.
但不知何故我未能以这种方式获得 VS2015 的选择:DTE.ActiveDocument.Selection
。
对于我来说,在 VS2015 中我创建了一个新的 custom Tool Window
项,在工具窗口中添加了一个简单的 TextBox
控件,然后双击默认的 Click me!
按钮导航到ToolWindow1Control.xaml.cs
文件中的 button-Click
方法,之后我添加如下代码以从文本框中获取文本并将其插入编辑器:
[SuppressMessage("Microsoft.Globalization", "CA1300:SpecifyMessageBoxOptions", Justification = "Sample code")]
[SuppressMessage("StyleCop.CSharp.NamingRules", "SA1300:ElementMustBeginWithUpperCaseLetter", Justification = "Default event handler naming pattern")]
private void button1_Click(object sender, RoutedEventArgs e)
{
string text = textBox.Text;
DTE dte = Package.GetGlobalService(typeof(DTE)) as DTE;
(dte.ActiveDocument.Selection as EnvDTE.TextSelection).Text = text;
}
所以对我来说,我实际上使用下面的代码来插入文本:
DTE dte = Package.GetGlobalService(typeof(DTE)) as DTE;
(dte.ActiveDocument.Selection as EnvDTE.TextSelection).Text = "Add your text here.";
另外:
要使用上面的代码,需要在ToolWindow1Control.xaml.cs
文件中添加定义:
using Microsoft.VisualStudio.Shell;
using EnvDTE;
希望对您有所帮助:)