다음을 통해 공유


고급 도구 상자 컨트롤 개발

참고

사용자 지정 컨트롤을 도구 상자에 추가 하려면 Visual Studio 10 SDK와 함께 제공 되는 도구 상자 컨트롤 템플릿을 사용 하는 것이 좋습니다.이 항목에서는 이전 버전과 호환성을 위해, 기존 컨트롤을 도구 상자에 추가 및 고급 도구 상자 컨트롤 개발에 대 한 유지 됩니다.

서식 파일을 사용 하 여 도구 상자의 컨트롤 만들기에 대 한 자세한 내용은 참조 하십시오. 방법: Windows Forms을 사용 하는 도구 상자 컨트롤 만들기방법: WPF를 사용 하 여 도구 상자 컨트롤을 만듭니다.

관리 패키지 프레임 워크를 기반으로 하는 Vspackage를 확장할 수 있습니다 Visual Studio 컨트롤을 추가 하 여 도구 상자 기능을 개체에서 파생 ToolboxItem 개체입니다. 각 ToolboxItem 에서 파생 된 개체에 의해 구현 됩니다 Component.

도구 상자 항목 공급자 VSPackage

관리 패키지 프레임 워크를 기반으로 하는 VSPackage 자체 도구 상자 컨트롤 공급자를 통해 등록 해야 합니다 .NET Framework 특성 및 도구 상자와 관련 된 이벤트를 처리 합니다.

도구 상자 항목 공급자로 Vspackage를 구성 하려면

  1. 인스턴스를 만들는 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 VSPackage 제공 하는 경우 확인 하려면 환경에서는 사용이 버전 번호 ToolboxItem 다시 개체가 있어야 수 로드 하거나 캐시 된 정보를 도구 상자에서 사용할 수 있는지.있는 Vspackage를 제공 하는 경우 다시 로드를 보장 하는 ToolboxItem 개발 중입니다, 항상 후 수정이 버전 번호를 증가 합니다.

  2. 경우는 ToolboxItem 개체를 사용할 수 없는 도구 상자 클립보드 형식은 인스턴스를 제공 ProvideToolboxFormatAttribute 클래스 구현에 적용 되어야 합니다는 Package 개체에서 지 원하는 각 클립보드 형식에 대 한의 ToolboxItem Vspackage를 제공 하는 개체입니다.

    지원 되는 도구 상자의 클립보드 형식에 대 한 자세한 내용은 도구 상자 (Visual Studio SDK).

    참고

    있는 Vspackage이 하나라도 제공 하면 ToolboxItem 비표준 클립보드 형식 가진 개체의 Visual Studio 전제 조건은 표시 된 해당 형식에만 ProvideToolboxFormatAttribute 인스턴스가 있는 Vspackage를 적용 Package 클래스 구현을 Vspackage가 지원 됩니다.Vspackage를 기본 클립보드 형식으로 표준이 지원 해야 하는 경우 인스턴스를 적용 해야 합니다 ProvideToolboxFormatAttribute 에 각 기본 형식으로 사용할 수 없는 형식입니다.

  3. 있는 VSPackage 동적 구성을 제공 하는 경우 ToolboxItem,이 있어야 합니다.

    1. 인스턴스를 적용 ProvideToolboxItemConfigurationAttribute 사용 하 여 생성은 Type 패키지를 사용 하 여 구현 하는 IConfigureToolboxItem 인터페이스입니다.

    2. 에 public Vspackage의 독립적인 클래스 Package, Vspackage를 구현 해야 합니다는 IConfigureToolboxItem 인터페이스입니다.

      인스턴스는 ProvideAssemblyFilterAttribute 클래스 구현에 적용 합니다 IConfigureToolboxItem, 인수로 선택 조건 (필터)을 포함 하는 문자열을 사용 하는 ProvideToolboxItemConfigurationAttribute 인스턴스 생성자.

알림 방법에 대 한의 Visual Studio 있는 VSPackage 도구 상자를 제공 하는 환경 제어, 참조 하십시오 도구 상자 지원 기능을 등록 하는 중.

하나를 어떻게 구현할 수 있는지 보여 주는 예를 IConfigureToolboxItem 지원를 참조 하십시오 연습: 동적으로 다음에 ToolboxItem 구성 사용자 지정.

  1. Vspackages를 제공 하는 ToolboxItem 처리 해야 ToolboxInitializedToolboxUpgraded 이벤트입니다.

    1. 에 대 한 처리기를 구현 하는 ToolboxInitializedToolboxUpgraded 이벤트:

      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.
      }
      
    2. 등록은 ToolboxInitializedToolboxUpgraded 이벤트입니다.

      이것은 일반적으로 수행 되는 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);
      }
      

    예에 대 한 처리기를 구현 하는 방법에 대 한 ToolboxInitializedToolboxUpgraded 이벤트를 참조 하십시오. 연습: 자동 로드 도구 상자 항목.

도구 상자 컨트롤 만들기

도구 상자 컨트롤의 기본 구현에서 파생 되어야 합니다 Component , 기본 또는 파생 된 구현에서 캡슐화는 ToolboxItem 개체입니다.

제공 하는 가장 쉬운 방법은 한 Component-도구 상자 컨트롤이 파생된 되는 구현입니다에서 파생 된 개체를 확장 하 여 Control, 특히는 UserControl 클래스입니다.

도구 상자 컨트롤을 만들려면

  1. 사용 솔루션 탐색기새 항목 추가 을 구현 하는 도구 상자 개체를 만드는 명령 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 Forms 컨트롤 제작에 대 한 자세한 내용은 .NET Framework에서 사용자 지정 Windows Forms 컨트롤 개발 또는 연습: 자동 로드 도구 상자 항목.

  2. (선택 사항) 응용 프로그램에서 파생 된 사용자 지정 개체를 사용할 수 있습니다에서 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 내부 컨트롤의 자체 독립적인된 구현을 제공 하는 개체입니다.클래스는 다음 만들고 모든 내부 구성 요소를 제공 하는 데 담당 합니다.

명시적 도구 상자 항목 추가

도구 상자에 추가할 컨트롤의 인스턴스를 포함 합니다 ToolboxItem 에서 파생 된 개체의 ToolboxItem 에 추가할 수는 도구 상자 를 사용 하는 IToolboxService 인터페이스.

캡슐화 하 고 도구 상자 컨트롤을 추가 하려면

  1. 캡슐화는 Component 구현에서의 인스턴스는 ToolboxItem 개체 나는 ToolboxItem-개체에서 해당 개체를 호출 하 여 파생 된 Initialize 메서드를 구현 하는 구성 요소의 Type:

    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.

    참고

    기본 구현에서 ToolboxItem 생성자 기록은 Type 인수 (#ctor(Type) 생성자 호출의 ToolboxItem 개체의 Initialize 메서드.

  2. 도구 상자 서비스를 사용 (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 기반 리플렉션을 사용 하 여 자동으로 감지 하 고 제대로 컨트롤을 추가 하려면 응용 프로그램의 도구 상자.

도구 상자의 컨트롤을 리플렉션 및 특성 적용

  1. 도구 상자 컨트롤의 인스턴스를 구현 하는 데 사용 되는 모든 객체를 식별 ToolboxItemAttribute.

    형식 인스턴스의 ToolboxItemAttribute 개체에 합니다 결정 하는 경우와 방법을 ToolboxItem 에서 생성 됩니다.

    1. 인스턴스를 적용 ToolboxItemAttribute 로 생성 된는 BOOLEAN 값이 false 개체에 해당 개체가 사용할 수 없는 리플렉션을 통해 도구 상자에 있습니다.

      이 같은 개체를 격리 하는 것이 유용할 수 있습니다는 UserControl 에서 도구 상자 개발 중입니다.

    2. 인스턴스를 적용 ToolboxItemAttribute 를 생성는 BOOLEAN 값이 true 개체를 해당 개체는 리플렉션을 통해 도구 상자에 활성화 되 고 개체에 기본 사용 하 여 도구 상자에 추가 해야 ToolboxItem 개체입니다.

    3. 인스턴스를 적용 ToolboxItemAttribute 를 생성은 Type 에서 파생 된 사용자 지정 개체의 ToolboxItem 개체를 사용할 수 있습니다의 도구 상자 리플렉션을 통해 개체에서 파생 된이 사용자 지정 개체를 사용 하 여 도구 상자에 추가 해야 하 고 ToolboxItem.

  2. 지정 (하는 Visual Studio 환경의 리플렉션 메커니즘) 비트맵 도구 상자 컨트롤에 표시 하는 데 사용 하는 도구 상자 인스턴스를 추가 하 여 ToolboxBitmapAttribute 컨트롤을 도구 상자에 구현.

  3. 필요한 경우 인스턴스를 적용 ToolboxItemFilterAttributeToolboxItem 리플렉션을 사용 하 여 정적으로 일치 하는 특성을 가진 개체를 표시 하는 개체입니다.

    아래 예제에서는 인스턴스를 도구 상자 컨트롤의 구현 된 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 VSPackages 정적으로 제공 GetToolboxItems 메서드는 리플렉션을 사용 하 여 도구 상자 항목, 지원 되는 모든 형식에 대 한 어셈블리를 검사 하 고 해당 형식에 대 한 항목을 반환 합니다. 반환 될 도구 상자 항목을 해야 합니다.

  • public이어야 합니다.

  • 구현에서 IComponent 클래스입니다.

  • abstract가 아니어야 합니다.

  • ToolboxItemAttribute 에.

  • 없는 한 ToolboxItemAttribute 설정 false 에

  • 제네릭 매개 변수가 포함되어 있지 않아야 합니다.

이 목록을 얻으려면

  1. 인스턴스를 만들 Assembly 참조 하는 어셈블리를 검색 하 여 ToolboxItem 개체입니다.

    참고

    인스턴스를 가져오기 위해 Assembly 는 현재 어셈블리에 대 한 정적 메서드를 사용 합니다. GetExecutingAssembly.

  2. 호출 GetToolboxItems, 반환 된 ICollection 적절 한 개체의 목록이 포함 된 개체입니다.

    참고

    개체에 반환 되는 경우 ICollection 의 올바른 인스턴스가 ToolboxBitmapAttribute 할당을 구현 하는 GetToolboxItems 됩니다 방법을 설정의 ToolboxItem 개체의 Bitmap 속성.

  3. 사용 GetService 액세스할 수 IToolboxService, 사용 하 고 해당 AddToolboxItem 에서 반환 된 항목을 추가 하는 방법을 ICollection 개체를 도구 상자에 있습니다.

    아래 코드는 실행 중인 응용 프로그램에 쿼리 및 모든 목록을 가져옵니다 해당 ToolboxItem 개체 및 로드 합니다. 코드 실행 중에 이것을 보여 주는 예제를 보려면 해당 Initialization 메서드에서 연습: 동적으로 다음에 ToolboxItem 구성 사용자 지정.

    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를 액세스할 수 있는 어셈블리에서 사용할 수 있어야 합니다.

추가 하 고 텍스트 리소스를 어셈블리에 사용할 수 있도록

  1. 솔루션 탐색기, 마우스 오른쪽 단추로 클릭 한 프로젝트입니다.

  2. 가리키는 추가를 누른 다음 새 항목.

  3. 새 항목 추가 선택 대화 상자에서 텍스트 파일 이름을 지정 하 고 있습니다.

  4. 솔루션 탐색기, 새로 만든된 텍스트 파일을 마우스 오른쪽 단추로 클릭 하 고 설정에서 빌드 작업 속성을 포함 리소스.

    항목에는 도구 상자 로드 되는 컨트롤의 구현 클래스 이름 포함 하는 어셈블리의 이름을 포함 해야 합니다.

    도구 상자에서 형식에 대 한 정보를 항목에 포함 된 텍스트 리소스 제어에 대 한 참조를 ParseToolboxResource 페이지 참조.

  5. 도구 상자 컨트롤 개체를 호스팅하는 어셈블리를 포함 하는 파일에 대 한 검색 경로 설정 합니다.

    ParseToolboxResourceHKEY_CURRENT_USER\Software\Microsoft\VisualStudio\ 레지스트리 항목에 지정 된 유일한 디렉터리 검색<version>\AssemblyFolders, 어디 <version> Visual Studio (예를 들어, 8.0)의 릴리스는 버전 번호입니다.

    참고

    루트 경로를 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\<Version> Visual Studio 셸 초기화 되 면 대체 루트 또는 사용으로 재정의 될 수 있습니다 DefaultRegistryRootAttribute.자세한 내용은 명령줄 스위치(Visual Studio SDK)을 참조하십시오.

    AssemblyFolder 레지스트리 항목을 올바른 형식에 대 한 자세한 내용은 ParseToolboxResource 페이지 참조.

  6. 인스턴스를 가져오는 Synchronized 텍스트가 포함 된 리소스에 액세스 하 고 지역화를 지 원하는 경우 범주 이름에 대 한 인스턴스를 필요 ResourceManager, 및 이러한 정보를 사용 하 여 호출 하는 ParseToolboxResource 메서드.

    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에서이 할 수 있습니다.

반사 도구 상자 컨트롤 자동 로드를 명시적으로 사용 하

  1. 인스턴스를 만들 Assembly, 참조를 검색 하 여 각 어셈블리에 ToolboxItem 개체입니다.

    참고

    인스턴스를 가져오기 위해 Assembly 는 현재 어셈블리에 대 한 정적 메서드를 사용 합니다. GetExecutingAssembly.

  2. 각 어셈블리에 대 한 검색을 위해 사용 하는 Assembly 개체의 GetTypes 각 목록을 구하는 방법 Type 어셈블리에 있습니다.

  3. 확인 형식을 추상이 아닌 한 지원는 IComponent 인터페이스 (도구 상자 컨트롤을 인스턴스화하는 데 사용 하는 모든 구현에 ToolboxItem 개체는이 인터페이스를 구현 해야 합니다).

  4. 특성을 가져올 Type 및이 정보를 사용 하 여 있는 VSPackage 개체를 로드 하 고 싶은지를 결정 합니다.

    참고

    주 서버에서 만들 수는 있지만 한 ToolboxItem 에서 개체는 IComponent 인터페이스 구현 하지 않고 인스턴스를 ToolboxItemAttribute 설정할 없습니다 false 적용, 우리가 이렇게 하지 않는 것이 좋습니다.

  5. 사용 GetConstructor 생성자에 대해 얻을 수 있는 ToolboxItem 도구 상자 컨트롤 해야 하는 개체입니다.

  6. 구성의 ToolboxItem 를 추가 하 고 개체의 도구 상자.

리플렉션 얻을 수 및 자동 로드 도구 상자 컨트롤을 명시적으로 사용을 보여 주는 예제를 보려면를 참조 하십시오은 CreateItemList 에서 설명한 연습: 자동 로드 도구 상자 항목.

추가 도구 상자 컨트롤 구성

언제, 어떻게 도구 상자 컨트롤을 표시 하 여 추가로 제어할 Vspackage를 행사할 수 있습니다의 도구 상자의 구현을 통해 IConfigureToolboxItem, 및를 사용 하 여 ProvideAssemblyFilterAttribute, 및 ProvideToolboxItemConfigurationAttribute.

적용 ToolboxItemFilterAttribute 클래스의 인스턴스 제공 정적 컨트롤 위로 언제, 어떻게는 도구 상자 컨트롤 사용할 수 있습니다.

동적 구성 지원에 대 한 도구 상자 컨트롤을 만들려면

  1. 구현 하는 클래스를 생성은 IConfigureToolboxItem 인터페이스는 Vspackage의 일환으로 합니다.

    참고

    IConfigureToolboxItem 같은 클래스에 있는 VSPackage 구현을 제공 하는 인터페이스를 구현 해야 합니다지 않습니다 Package.

  2. 구현에 연결 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));
                }
            }
        }
    }
    
  3. 특정 구현을 제공 하는 있는 VSPackage 등록 IConfigureToolboxItem 인스턴스를 적용 하 여 ProvideToolboxItemConfigurationAttribute 있는 VSPackage 구현과 Package.

    아래 예에 게 알려는 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. 이 임의의 클립보드 형식에 노출 될 수 있습니다 있는 도구 상자 및 편집기에서.

Vspackages에 관리 패키지 프레임 워크를 기반으로 해야 합니다 등록 사용자 정의 제공 하는 도구 상자 인스턴스를 적용 하면 항목을 클립보드 형식은 ProvideToolboxFormatAttribute 클래스가 구현 하는 Package.

으로 등록에 대 한 자세한 내용은 도구 상자 공급자를 참조 하십시오 도구 상자 지원 기능을 등록 하는 중.

도구 상자의 컨트롤을 사용자 지정 클립보드 서식 및 끌어서 놓기 지원을 제공

  1. 구현을 만들은 ToolboxItemCreatorCallback 대리자입니다.

    이 구현에서 반환 해야는 ToolboxItem 표준 클립보드 형식을 지 원하는 개체입니다.

    구현 예를 대 한는 ToolboxItemCreatorCallback 위임, 볼의 ToolboxItemToolboxItemCreatorCallback 페이지를 참조 합니다.

  2. 이 구현 하 게는 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) {
               /*
                */
            }
        }
    }
    

단원 내용

참고 항목

작업

방법: 도구 상자 제어

개념

도구 상자 지원 기능을 등록 하는 중

방법: Interop 어셈블리를 사용 하 여 사용자 지정 도구 상자 항목을 제공 합니다.

도구 상자를 관리합니다.

기타 리소스

도구 상자 (Visual Studio SDK)

도구 상자 연습