备注
建议使用此方法的方式将自定义控件添加到工具箱将使用随 Visual Studio 10 SDK 的工具箱控件模板。本主题保留以备向后兼容,用于将现有控件添加到工具箱和用于高级工具箱控件开发。
有关使用该模板创建的工具箱控件的更多信息,请参见 如何:创建使用 windows 窗体的一个工具箱控件 和 如何:使用 WPF 创建一个工具箱控件。
根据托管包结构的 VSPackage 可以通过添加控件扩展 Visual Studio 工具箱功能,从 ToolboxItem 对象派生的对象。 每 ToolboxItem 通过 Component派生的对象实现。
工具箱项提供程序 VSPackage
根据托管包结构的 VSPackage 通过 .NET Framework 属性并处理工具箱相关的事件必须注册为工具箱控件提供程序。
配置 VSPackage 为工具箱项提供程序
创建 ProvideToolboxItemsAttribute 的实例适合于实现 Package的类。 例如:
Namespace Vsip.LoadToolboxMembers <ProvideToolboxItems(14)> _ <DefaultRegistryRoot("Software\Microsoft\VisualStudio\8.0")> _ <InstalledProductRegistration(False, "#100", "#102", "1.0", IconResourceID := 400)> _ <ProvideLoadKey("Standard", "1.0", "Package Name", "Company", 1)> _ <ProvideMenuResource(1000, 1)> _ <Guid("YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY")> _ Public Class LoadToolboxMembers Inherits Package End Class End Namespace
namespace Vsip.LoadToolboxMembers { [ProvideToolboxItems(14)] [DefaultRegistryRoot("Software\\Microsoft\\VisualStudio\\8.0")] [InstalledProductRegistration(false, "#100", "#102", "1.0", IconResourceID = 400)] [ProvideLoadKey("Standard", "1.0", "Package Name", "Company", 1)] [ProvideMenuResource(1000, 1)] [Guid("YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY")] public class LoadToolboxMembers : Package {
备注
ProvideToolboxItemsAttribute 的构造函数采用整数版本号作为参数。Visual Studio 环境使用此版本号确定是否必须重新加载提供 ToolboxItem 对象的 VSPackage 或缓存的信息是否可由工具箱使用。若要确保重新加载 VSPackage,同时提供 ToolboxItem 开发中时,请在所有修改后总是增加此版本号。
如果 ToolboxItem 对象提供非标准工具箱剪贴板格式,必须将 ProvideToolboxFormatAttribute 实例于实现每个剪贴板格式的类 Package 对象支持 VSPackage 提供的 ToolboxItem 对象。
有关支持的工具箱剪贴板格式的更多信息,请参见 工具箱 (Visual Studio SDK)。
备注
如果 VSPackage 指示它提供所有 ToolboxItem 对象与非标准剪贴板格式, Visual Studio 环境,假设 ProvideToolboxFormatAttribute 实例表示的那些格式应用于 VSPackage 中 Package 类实现由 VSPackage 支持。如果 VSPackage 需要支持默认剪贴板格式以及非标准格式,它必须应用 ProvideToolboxFormatAttribute 实例每个默认布局以及该非标准格式的。
如果 VSPackage 提供 ToolboxItem的动态配置,它必须:
应用 ProvideToolboxItemConfigurationAttribute 实例构造方式使用包 IConfigureToolboxItem 使用实现接口的 Type 。
在 VSPackage 中 Package的 public 类独立, VSPackage 必须实现 IConfigureToolboxItem 接口。
必须应用 ProvideAssemblyFilterAttribute 的实例于实现 IConfigureToolboxItem的类,请使用包含选择条件 (筛选器) 的字符串为 ProvideToolboxItemConfigurationAttribute 实例的构造函数的参数。
有关如何通知 Visual Studio 环境的信息 VSPackage 提供工具箱控件,请参见 注册工具箱支持功能。
对于一个用于阐释如何的示例可能实现 IConfigureToolboxItem ,请参见 演练:动态自定义 ToolboxItem 配置。
提供 ToolboxItem 的 Vspackage 必须处理 ToolboxInitialized 和 ToolboxUpgraded 事件。
实现 ToolboxInitialized 和 ToolboxUpgraded 事件的处理程序:
Private Sub OnToolboxUpgraded(ByVal sender As Object, ByVal e As EventArgs) OnToolboxInitialized(send, e) End Sub Private Sub OnToolboxInitialized(ByVal sender As Object, ByVal e As EventArgs) 'Make sure all toolbox items are added. End Sub
private void OnToolboxUpgraded(object sender, EventArgs e) { OnToolboxInitialized(send,e); } private void OnToolboxInitialized(object sender, EventArgs e) { //Make sure all toolbox items are added. }
订阅 ToolboxInitialized 和 ToolboxUpgraded 事件。
这在 Package 实现的 Initialize 方法通常执行:
Protected Overloads Overrides Sub Initialize() AddHandler ToolboxInitialized, AddressOf OnToolboxInitialized AddHandler ToolboxUpgraded, AddressOf OnToolboxUpgraded End Sub
protected override void Initialize() { ToolboxInitialized += new EventHandler(OnToolboxInitialized); ToolboxUpgraded += new EventHandler(OnToolboxUpgraded); }
有关的示例演示如何实现 ToolboxInitialized 和 ToolboxUpgraded 事件的处理程序,请参见 演练:自动上载的工具箱项。
工具箱控件创建
在默认或 ToolboxItem 对象的派生的实现必须从 Component 派生并封装工具箱控件的基础实现。
最简单的方法提供 Component- 工具箱控件的派生的实现是通过扩展从 Control派生的对象,具体而言, UserControl 类。
创建工具箱控件
使用解决方案资源管理器的 添加新项目 命令创建工具箱对象实现 UserControl。
Public Partial Class ToolboxControl1 Inherits UserControl Public Sub New() InitializeComponent() End Sub Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) MsgBox("Hello world from" & Me.ToString()) End Sub Private Sub ToolboxItem1_Load(ByVal sender As Object, ByVal e As EventArgs) End Sub End Class
public partial class ToolboxControl1 : UserControl { public ToolboxControl1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { MessageBox.Show("Hello world from" + this.ToString()); } private void ToolboxItem1_Load(object sender, EventArgs e) { } }
有关创作 windows 窗体控件和工具箱控件的更多信息,请参见 使用 .NET Framework 开发自定义 Windows 窗体控件 或 演练:自动上载的工具箱项。
(可选) 应用程序可以选择使用从 ToolboxItem 对象派生的自定义对象提供其工具箱控件。 工具箱。
备注
从 ToolboxItem 对象派生的任何类都必须具有 SerializableAttribute 的实例应用于它。
从 ToolboxItem 派生的自定义实现可以通过提供如何在更大程度的控件扩展应用程序序列化 ToolboxItem 数据,增强的处理设计器元数据,对于非标准剪贴板允许最终用户交互的布局和功能的支持。
在此示例中,则对话框将提示用户选择功能:
<ToolboxItemAttribute(GetType(CustomControl))> _ <Serializable()> _ Class CustomControl Inherits ToolboxItem Public Sub New(ByVal type As Type) MyBase.New(GetType(CustomControl)) End Sub Public Sub New(ByVal type As Type, ByVal icon As Bitmap) MyBase.New(GetType(SCustomControl)) Me.DisplayName = "CustomContorl" Me.Bitmap = icon End Sub Private Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext) Deserialize(info, context) End Sub Protected Overloads Overrides Function CreateComponentsCore(ByVal host As IDesignerHost) As IComponent() Dim dialog As New CustomControlDialog(host) Dim dialogResult__1 As DialogResult = dialog.ShowDialog() If dialogResult__1 = DialogResult.OK Then Dim component As IComponent = DirectCast(dialog.CustomInstance, IComponent) Dim container As IContainer = host.Container container.Add(component) Return New IComponent() {component} Else Return New IComponent() {} End If End Function End Class
[ToolboxItemAttribute(typeof(CustomControl))] [Serializable] class CustomControl : ToolboxItem { public CustomControl(Type type) : base(typeof(CustomControl)) {} public CustomControl(Type type, Bitmap icon) : base(typeof(SCustomControl)) { this.DisplayName = "CustomContorl"; this.Bitmap = icon; } private CustomControl(SerializationInfo info, StreamingContext context) { Deserialize(info, context); } protected override IComponent[] CreateComponentsCore(IDesignerHost host) { CustomControlDialog dialog = new CustomControlDialog(host); DialogResult dialogResult = dialog.ShowDialog(); if (dialogResult == DialogResult.OK) { IComponent component = (IComponent)dialog.CustomInstance; IContainer container = host.Container; container.Add(component); return new IComponent[] { component }; } else { return new IComponent[] {}; } } }
备注
对于从 ToolboxItem 对象派生的类也可能会提供其基础控件自身独立的实现。该类将创建并提供所有基础元素负责然后单击。
工具箱项的显式添加
使用 IToolboxService 接口,将添加到工具箱,必须在 ToolboxItem 实例从 ToolboxItem 派生的或对象包含然后将控件添加到 工具箱 。
封装并添加工具箱控件
封装在 ToolboxItem 对象实例的 Component 实现或 ToolboxItem派生的对象通过调用该对象的实现的元素的 Type的 Initialize 方法:
Dim customItem As New ToolboxItem() If customItem IsNot Nothing Then customItem.Initialize(userControl) End If
ToolboxItem customItem = new ToolboxItem() ; if (customItem != null) { customItem.Initialize(userControl); }
上述对象从 UserControl 派生的 userControl 的示例 (显示的 ToolboxControl1 对象的实例上面) 使用构造新的 ToolboxItem。
备注
采用 Type 参数的 ToolboxItem 构造函数的默认实现 (#ctor(Type) 构造函数调用 ToolboxItem 对象的 Initialize 方法。
使用工具箱服务 (IToolboxService) 与基础控件实现添加构造 ToolboxItem 对象。
在下面的示例中,对工具箱服务的访问获取,某些 ToolboxItem 实例 customItem 的属性设置, customItem 然后添加到 工具箱:
Dim toolboxService As IToolboxService = TryCast(GetService(GetType(IToolboxService)), IToolboxService) customItem.Bitmap = New System.Drawing.Bitmap(ToolBoxControl1, "Control1.bmp") customItem.DisplayName = "Custom Item" toolboxService.AddToolboxItem(item, "Custom Tab")
IToolboxService toolboxService = GetService(typeof(IToolboxService)) as IToolboxService; customItem.Bitmap = new System.Drawing.Bitmap(ToolboxControl1,"Control1.bmp"); customItem.DisplayName= "Custom Item"; toolboxService.AddToolboxItem(item, "Custom Tab");
使用添加的反射工具箱控件
将特性应用于实现工具箱控件的类允许 Visual Studio 环境或 Visual Studio SDK 基于的应用程序使用反射自动检测和适当地将控件添加到 工具箱。
应用反射和特性应用于工具箱控件
标识使用的所有对象实现与 ToolboxItemAttribute实例的工具箱控件。
ToolboxItemAttribute 实例的类型为的对象将确定是否,并 ToolboxItem 如何从中构造。
应用 ToolboxItemAttribute 实例构造时使用 false 的 BOOLEAN 值设置为对象使该对象尚未提供到工具箱通过反射。
在开发过程中,将非常有用。独立对象,例如从 工具箱 的 UserControl 。
应用 ToolboxItemAttribute 实例构造时使用 true 的 BOOLEAN 值对对象进行对象可向工具箱通过反射并需要使用默认 ToolboxItem 对象,对象添加到工具箱中。
应用 ToolboxItemAttribute 实例构造了与 ToolboxItem 派生的自定义对象的 Type 将该对象可用于 工具箱 通过反射并需要对象添加到工具箱使用从派生的 ToolboxItem此自定义对象。
指定 (可 Visual Studio 环境的反射机制) 位图用于显示工具箱上使用的控件 工具箱 通过添加 ToolboxBitmapAttribute 实例添加到工具箱控件实现。
如果需要,应用 ToolboxItemFilterAttribute 实例与使用反射来 ToolboxItem 对象静态将它们标记为具有匹配的属性的对象的使用。
在下面的示例中,工具箱控件的实现具有 ProvideAssemblyFilterAttribute 实例应用于它,使该控件可用于在 工具箱 ,只有在当前工作文件是 UserControl 设计器时
<ToolboxItemFilter(System.Windows.Forms.UserControl, ToolboxItemFilterType.Require)> _ <SerializableAttribute()> _ <GuidAttribute("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")> _ Friend Class CustomToolboxItem Inherits ToolboxItem End Class
[ToolboxItemFilter(System.Windows.Forms.UserControl,ToolboxItemFilterType.Require)] [SerializableAttribute()] //ToolboxItem implementations much has this attribute. [GuidAttribute("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")] internal class CustomToolboxItem : ToolboxItem
有三种基本技术对于使用反射来自动上载的 ToolboxItem。
使用检索 ToolService 的功能工具箱控件
ToolboxService 提供 Vspackage 以使用反射来浏览该程序集的所有类型支持工具箱项,并返回这些类型的项的静态 GetToolboxItems 方法。 将返回,工具箱项必须:
为公共类型。
实现 IComponent 类。
不是抽象类型。
在其类型的 ToolboxItemAttribute 。
没有 ToolboxItemAttribute 设置为在其类型的 false
不包含泛型参数。
若要获取此列表
创建引用要浏览 ToolboxItem 对象的程序集的 Assembly 实例。
备注
若要获取 Assembly 实例当前程序集的,请使用静态方法 GetExecutingAssembly。
调用 GetToolboxItems,返回包含适当的对象的列表 ICollection 对象。
备注
如果在返回的 ICollection 的对象具有 ToolboxBitmapAttribute 活动实例分配给其实现, GetToolboxItems 方法将设置 ToolboxItem 对象的 Bitmap 属性。
使用 GetService 获取对 IToolboxService的访问,并使用其 AddToolboxItem 方法从返回的 ICollection 对象向工具箱中添加项。
下面的代码运行查询的应用程序并获取其所有 ToolboxItem 对象列表并加载它们。 有关演示此在运行的代码示例,请参见。 演练:动态自定义 ToolboxItem 配置的 Initialization 方法。
Protected ToolboxItemList As ICollection = Nothing ToolboxItemList = ToolboxService.GetToolboxItems(Assembly.GetExecutingAssembly(), "") If ToolboxItemList Is Nothing Then Throw New ApplicationException("Unable to generate a toolbox Items listing for " & [GetType]().FullName) End If Dim toolboxService As IToolboxService = TryCast(GetService(GetType(IToolboxService)), IToolboxService) For Each itemFromList As ToolboxItem In ToolboxItemList toolboxService.AddToolboxItem(itemFromList, CategoryTab) Next
protected ICollection ToolboxItemList = null; ToolboxItemList = ToolboxService.GetToolboxItems(Assembly.GetExecutingAssembly(), ""); if (ToolboxItemList == null){ throw new ApplicationException("Unable to generate a toolbox Items listing for " + GetType().FullName); } IToolboxService toolboxService = GetService(typeof(IToolboxService)) as IToolboxService; foreach (ToolboxItem itemFromList in ToolboxItemList){ toolboxService.AddToolboxItem(itemFromList, CategoryTab); }
用于自动上载工具箱控件的嵌入文本资源
在包含程序集的一种文本资源正确布局表格工具箱控件可由 ParseToolboxResource 使用自动填充工具箱控件,则相应地设置。
包含对象的列表中选择要加载的文本资源必须可用于程序集可以访问 VSPackage。
添加和提供文本资源程序集。
在 解决方案资源管理器,请右击该项目。
指向 添加,然后单击 新项目。
在 添加新项目 对话框中,选择 " 文本文件 并提供一个名称。
在 解决方案资源管理器,右击新创建的文本文件并将 生成操作 属性设置为嵌入资源。
可以将加载的 工具箱 控件的项必须包含实现的类,包含它的程序集的名称。
有关工具箱到嵌入文本资源的控制项的信息格式,请参见 ParseToolboxResource 参考页。
设置包含程序集的文件的搜索路径承载工具箱控件对象。
ParseToolboxResource,在注册表项指定的仅搜索目录 \Software\Microsoft\VisualStudio HKEY_CURRENT_USER \version\AssemblyFolders,其中 version 是版本的版本号 Visual Studio (例如, 8.0)。
备注
HKEY_LOCAL_MACHINE \ \SOFTWARE\Microsoft\VisualStudioVersion 根路径可以重写操作替换为 DefaultRegistryRootAttribute的根,当 Visual Studio shell 初始化时,或使用。有关更多信息,请参见命令行开关 (Visual Studio SDK)。
有关 AssemblyFolder 注册表项的正确格式的详细信息,请参见 ParseToolboxResource 参考页。
,如果本地化支持类别名称, ResourceManager实例是必需的,并且使用这些调用 ParseToolboxResource 方法,获取 Synchronized 实例访问嵌入文本资源,。
Dim rm As New ResourceManager("TbxCategories", Assembly.GetExecutingAssembly()) Dim toolboxStream As Stream = TbxItemProvider.[GetType]().Assembly.GetManifestResourceStream("ToolboxItems.txt") If toolboxStream IsNot Nothing Then Using reader As TextReader = New StreamReader(toolboxStream) ParseToolboxResource(reader, rm) End Using End If
ResourceManager rm = new ResourceManager("TbxCategories", Assembly.GetExecutingAssembly()); Stream toolboxStream = TbxItemProvider.GetType().Assembly.GetManifestResourceStream("ToolboxItems.txt"); if (toolboxStream != null) { using (TextReader reader = new StreamReader(toolboxStream)) { ParseToolboxResource(reader, rm); } }
在上面的示例中,在包含类 TbxItemProvider 程序集的嵌入资源包含文本的列表传递到 ParseToolboxResource 与 TbxCategories 字符串资源。
方法将搜索包含程序集的所有文件目录中指定在 AssemblyFolders 注册表项下为列出的工具箱控件在该资源并加载它们。
备注
如果 ParseToolboxResource 找到的工具箱控件具有 ToolboxBitmapAttribute 活动实例分配给其实现, ParseToolboxResource 将设置用于的位图显示工具箱控件。
显式用于自动上载工具箱控件,的反射
如果显式查询它们包含的程序集有关 工具箱 控件的信息是必需的,而不是委托任务 GetToolboxItems,则可以执行。
显式使用反射来自动上载工具箱控件
创建 Assembly实例,引用要浏览 ToolboxItem 对象的每个程序集。
备注
若要获取 Assembly 实例当前程序集的,请使用静态方法 GetExecutingAssembly。
验证类型不是抽象的和不支持 IComponent 接口 (工具箱控件的所有实现用于实例化 ToolboxItem 对象必须实现此接口)。
获取 Type 属性并使用这些信息确定 VSPackage 是否希望填充对象。
备注
虽然在的主体创建从 IComponent 接口实现的一 ToolboxItem 对象没有未设置的 ToolboxItemAttribute 实例。 false 可能会应用于它,建议不要这样做。
使用 GetConstructor 获取工具箱控件所需的 ToolboxItem 对象的构造函数。
构造 ToolboxItem 对象并将其添加到 工具箱。
若要查看的示例阐释如何使用反射获取和自动上载工具箱控件的显式使用,请参见。 演练:自动上载的工具箱项描述的 CreateItemList 。
其他工具箱控件配置
VSPackage 中执行其他控件添加到工具箱控件何时以及如何通过对 ProvideAssemblyFilterAttribute的 工具箱,通过 IConfigureToolboxItem的实现以及用来显示和 ProvideToolboxItemConfigurationAttribute。
工具箱 控件何时以及如何可用,应用 ToolboxItemFilterAttribute 实例于类仅提供静态控件为。
若要创建动态配置为工具箱控件支持
构造 IConfigureToolboxItem 实现接口的类作为 VSPackage 的一部分。
备注
在提供 Package的 VSPackage 中实现的同一类无法实现 IConfigureToolboxItem 接口。
关联 IConfigureToolboxItem 的实现与特定程序集的对象通过应用 ProvideAssemblyFilterAttribute 的实例于它。
下面的示例提供工具箱控件对象程序集的一个动态配置在 Vsip.* 命名空间和要求中某些 ToolboxItem 对象。 UserControl仅显示基于的设计器和其他不可见。 UserControl基于设计器。
<ProvideAssemblyFilterAttribute("Vsip.*, Version=*, Culture=*, PublicKeyToken=*")> _ <GuidAttribute("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")> _ Public NotInheritable Class ToolboxConfig Implements IConfigureToolboxItem Public Sub New() End Sub ''' <summary> ''' Adds extra configuration information to this toolbox item. ''' </summary> Public Sub ConfigureToolboxItem(ByVal item As ToolboxItem) If item Is Nothing Then Exit Sub End If 'hide from .NET Compact Framework on the device designer. Dim newFilter As ToolboxItemFilterAttribute = Nothing If item.TypeName = GetType(ToolboxControl1).ToString() Then newFilter = New ToolboxItemFilterAttribute("System.Windows.Forms.UserControl", ToolboxItemFilterType.Require) ElseIf item.TypeName = GetType(ToolboxControl2).ToString() Then newFilter = New ToolboxItemFilterAttribute("System.Windows.Forms.UserControl", ToolboxItemFilterType.Prevent) End If If newFilter IsNot Nothing Then Dim array As New ArrayList() array.Add(newFilter) item.Filter = DirectCast(array.ToArray(GetType(ToolboxItemFilterAttribute)), ToolboxItemFilterAttribute()) End If End Sub End Class
[ProvideAssemblyFilterAttribute("Vsip.*, Version=*, Culture=*, PublicKeyToken=*")] [GuidAttribute("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")] public sealed class ToolboxConfig : IConfigureToolboxItem { public ToolboxConfig() { } /// <summary> /// Adds extra configuration information to this toolbox item. /// </summary> public void ConfigureToolboxItem(ToolboxItem item) { if (item == null) return; //hide from .NET Compact Framework on the device designer. ToolboxItemFilterAttribute newFilter = null; if (item.TypeName == typeof(ToolboxControl1).ToString()) { newFilter = new ToolboxItemFilterAttribute("System.Windows.Forms.UserControl", ToolboxItemFilterType.Require); } else if (item.TypeName == typeof(ToolboxControl2).ToString()) { newFilter = new ToolboxItemFilterAttribute("System.Windows.Forms.UserControl", ToolboxItemFilterType.Prevent); } if (newFilter != null) { ArrayList array = new ArrayList(); array.Add(newFilter); item.Filter = (ToolboxItemFilterAttribute[]) array.ToArray(typeof(ToolboxItemFilterAttribute)); } } } }
注册 VSPackage 为了提供 IConfigureToolboxItem 的特定实现通过应用 ProvideToolboxItemConfigurationAttribute 实例于 Package的 VSPackage 的实现。
下面的示例将通知 Visual Studio 环境 Vsip.ItemConfiguration.ItemConfiguration 实现的包提供类 Vsip.ItemConfiguration.ToolboxConfiguration 支持动态 ToolboxItem。
<ProvideToolboxItemsAttribute(3)> _ <DefaultRegistryRoot("Software\Microsoft\VisualStudio\8.0")> _ <InstalledProductRegistration(False, "#100", "#102", "1.0", IconResourceID := 400)> _ <ProvideLoadKey("Standard", "1.0", "Package Name", "Company", 1)> _ <ProvideMenuResource(1000, 1)> _ <ProvideToolboxItemConfigurationAttribute(GetType(ToolboxConfig))> _ <GuidAttribute("YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY")> _ Public Class ItemConfiguration Inherits Package End Class
[ProvideToolboxItemsAttribute(3)] [DefaultRegistryRoot("Software\\Microsoft\\VisualStudio\\8.0")] [InstalledProductRegistration(false, "#100", "#102", "1.0", IconResourceID = 400)] [ProvideLoadKey("Standard", "1.0", "Package Name", "Company", 1)] [ProvideMenuResource(1000, 1)] [ProvideToolboxItemConfigurationAttribute(typeof(ToolboxConfig))] [GuidAttribute("YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY")] public class ItemConfiguration : Package
自定义拖放支持
除了添加到 工具箱 外, ToolboxItem 对象及其实现在 Visual Studio IDE 可用于扩展拖放支持。 这会允许任意剪贴板格式显示在 工具箱 和编辑。
Vspackage 根据托管包结构通过应用 ProvideToolboxFormatAttribute 实例必须为提供自定义 工具箱 项目剪贴板格式的寄存器,在实现 Package的类。
有关注册为 工具箱 提供程序的更多信息,请参见 注册工具箱支持功能。
若要提供自定义剪贴板格式和拖放支持与工具箱控件
创建 ToolboxItemCreatorCallback 委托的实现。
此实现应返回支持非标准剪贴板格式的 ToolboxItem 对象。
有关 ToolboxItemCreatorCallback 委托的示例实现,请参见 ToolboxItem 和 ToolboxItemCreatorCallback 参考页。
进行此实现 ToolboxItemCreatorCallback 委托可用于 Visual Studio 工具箱 为非标准工具箱通过调用 AddCreator。
<GuidAttribute("7D91995B-A799-485e-BFC7-C52545DFB5DD")> _ <ProvideToolboxFormatAttribute("MyFormat")> _ Public Class ItemConfiguration Inherits MSVSIP.Package Public Overloads Overrides Sub Initialize() '"Adding this class as a ToolboxItemCreator"); Dim toolbox As IToolboxService = DirectCast(host.GetService(GetType(IToolboxService)), IToolboxService) If toolbox IsNot Nothing Then toolboxCreator = New ToolboxItemCreatorCallback(Me.OnCreateToolboxItem) toolbox.AddCreator(toolboxCreator, "MyFormat", host) End If End Sub End Class
[GuidAttribute("7D91995B-A799-485e-BFC7-C52545DFB5DD")] [ProvideToolboxFormatAttribute("MyFormat")] public class ItemConfiguration : MSVSIP.Package { public override void Initialize() { /* */ //"Adding this class as a ToolboxItemCreator"); IToolboxService toolbox = (IToolboxService)host.GetService(typeof(IToolboxService)); if (toolbox != null) { toolboxCreator = new ToolboxItemCreatorCallback(this.OnCreateToolboxItem); toolbox.AddCreator(toolboxCreator, "MyFormat", host); } private ToolboxItem OnCreateToolboxItem(object serializedData, string format) { /* */ } } }
本节内容
如何:支持工具箱拖放功能
在文档视图描述如何实现拖放支持。如何:使用互操作程序集,提供自定义工具箱项
添加新的 Activex 控件和新项目的描述如何向 Visual Studio 工具箱。 这些新的项目可能有 VSPackage 或自定义格式支持的标准剪贴板格式。注册工具箱支持功能
描述如何注册 VSPackage 作为工具箱提供程序。 并讨论支持或使用其他工具箱功能。