使用 Visual Studio 2005 创建工具窗口加载项
展示如何使用 Visual Studio 2005 创建工具窗口插件。
引言
本文旨在展示如何创建 Visual Studio .NET 2005 插件。此插件将包含一个 ToolWindow,以及“视图”菜单下的一个菜单项来显示该 ToolWindow。如果窗口被关闭,可以使用菜单项再次显示它。
创建项目
首先,创建一个新的 Extensibility 项目,类型为 Visual Studio 插件。这将显示向导来指导您完成项目创建。在向导中,您需要选择以下选项
- 编程语言:C#
将创建一个工具菜单项。只有当用户在“插件管理器”对话框中选中“加载”复选框时,插件才会加载。
向导的主要页面是第 4 页,您可以在其中选择创建工具菜单项。
添加工具窗口控件
工具窗口是托管在 ActiveX 容器中的用户控件,因此请继续向项目添加新的用户控件。我的控件名为 ToolWindowControl
,并且上面有一个按钮。您可以使您的控件尽可能复杂;但是,请记住它占用的实际空间。
要使用您的控件访问 IDE 的“对象”,请在控件上创建一个类型为 EnvDTE80.DTE2
的私有字段,名为 applicationObject
。然后,为此字段创建一个 get/set 属性;最快的方法是右键单击该字段,在“重构”菜单下,单击“封装字段”,然后单击“确定”。当窗口初始化时,您将设置此属性。
修改插件以用于工具窗口
IDE 中的几乎每个其他工具窗口都是通过“视图”菜单打开的。向导生成的代码将在“工具”菜单上为我们放置一个项目,我们需要更改其位置。在Connect.cs中,您将找到创建菜单项并处理它的代码。
OnConnection
方法包含生成菜单项的代码。要将其移动到“视图”菜单,只需遍历此方法并将找到的任何“工具”替换为“视图”。所有重要的匹配项应该都在第一个 try
/catch
块中。您的代码应该最终像这样
try
{
ResourceManager resourceManager =
new ResourceManager("ToolWindowArticle.CommandBar",
Assembly.GetExecutingAssembly());
CultureInfo cultureInfo = new
System.Globalization.CultureInfo(_applicationObject.LocaleID);
string resourceName = String.Concat(cultureInfo.TwoLetterISOLanguageName,
"View");
toolsMenuName = resourceManager.GetString(resourceName);
}
catch
{
toolsMenuName = "View";
}
我删除了向导生成的注释,以保持代码简短。
接下来,应该在该类中创建两个 private
字段来保存窗口和控件。我的代码如下
private Window toolWindow;
private ToolWindowControl toolWindowControl;
由于工具窗口直到 IDE 加载后才会创建,因此代码不应与菜单项生成位于同一代码段中。在 OnConnect
方法的末尾,添加一个 else if
语句,条件为:connectMode == ext_ConnectMode.ext_cm_AfterStartup
。此条件确保代码仅在启动后执行。如果您复制并粘贴以下代码,您将需要更新它以包含您的变量和一个新的 GUID。此代码创建窗口并在控件上设置 ApplicationObject
属性。
else if (connectMode == ext_ConnectMode.ext_cm_AfterStartup)
{
#region Load Tool Window
object programmableObject = null;
string guidString = "{9FFC9D9B-1F39-4763-A2AF-66AED06C799E}";
Windows2 windows2 = (Windows2)_applicationObject.Windows;
Assembly asm = Assembly.GetExecutingAssembly();
toolWindow = windows2.CreateToolWindow2(_addInInstance, asm.Location,
"ToolWindowArticle.ToolWindowControl",
"Pirate Window", guidString, ref programmableObject);
toolWindow.Visible = true;
toolWindowControl = (ToolWindowControl)toolWindow.Object;
toolWindowControl.ApplicationObject = _applicationObject;
#endregion
}
使菜单项显示 ToolWindow
加载插件时将显示窗口;但是,关闭窗口后无法重新显示该窗口。第一次单击菜单项会加载插件;但是,进一步单击不会使其再次显示。快速添加到 Exec
方法将使其在每次单击菜单项时再次显示。在 commandName
的 if
语句下,添加以下内容。
toolWindow.Visible = true;
结论
本文希望能帮助您创建一个 Visual Studio 插件,该插件可以显示能够与 IDE 交互的 ToolWindow。您创建的“视图”菜单项应在关闭窗口后重新显示它。
历史
- 2007 年 2 月 17 日 - 第一版。