IComponentDiscoveryService.GetComponentTypes(IDesignerHost, Type) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
사용할 수 있는 구성 요소 형식의 목록을 가져옵니다.
public:
System::Collections::ICollection ^ GetComponentTypes(System::ComponentModel::Design::IDesignerHost ^ designerHost, Type ^ baseType);
public System.Collections.ICollection GetComponentTypes (System.ComponentModel.Design.IDesignerHost designerHost, Type baseType);
public System.Collections.ICollection GetComponentTypes (System.ComponentModel.Design.IDesignerHost? designerHost, Type? baseType);
abstract member GetComponentTypes : System.ComponentModel.Design.IDesignerHost * Type -> System.Collections.ICollection
Public Function GetComponentTypes (designerHost As IDesignerHost, baseType As Type) As ICollection
매개 변수
- designerHost
- IDesignerHost
디자인 타임 서비스를 제공하는 디자이너 호스트입니다. null
일 수 있습니다.
- baseType
- Type
검색할 구성 요소를 지정하는 기본 형식입니다. null
일 수 있습니다.
반환
사용할 수 있는 구성 요소 형식의 목록입니다.
예제
다음 코드 예제를 사용 GetComponentTypes 하는 방법에 설명 합니다 메서드에서 파생 ScrollableControl 되는 모든 형식을 찾습니다 형식입니다.
// This class defines the designer actions that appear on the control
// that is being designed.
internal class DemoActionList :
System.ComponentModel.Design.DesignerActionList
{
// Cache a reference to the designer host.
private IDesignerHost host = null;
// Cache a reference to the control.
private DemoControl relatedControl = null;
// Cache a reference to the designer.
private DemoControlDesigner relatedDesigner = null;
//The constructor associates the control
//with the designer action list.
public DemoActionList(IComponent component)
: base(component)
{
this.relatedControl = component as DemoControl;
this.host =
this.Component.Site.GetService(typeof(IDesignerHost))
as IDesignerHost;
IDesigner dcd = host.GetDesigner(this.Component);
this.relatedDesigner = dcd as DemoControlDesigner;
}
// This method creates and populates the
// DesignerActionItemCollection which is used to
// display designer action items.
public override DesignerActionItemCollection GetSortedActionItems()
{
DesignerActionItemCollection items =
new DesignerActionItemCollection();
// If the Timer component has not been created, show the
// "Create Timer" DesignerAction item.
//
// If the Timer component exists, show the timer-related
// options.
if (this.relatedDesigner.createdTimer == null)
{
items.Add(new DesignerActionMethodItem(
this,
"CreateTimer",
"Create Timer",
true));
}
else
{
items.Add(new DesignerActionMethodItem(
this,
"ShowEventHandlerCode",
"Show Event Handler Code",
true));
items.Add(new DesignerActionMethodItem(
this,
"RemoveTimer",
"Remove Timer",
true));
}
items.Add(new DesignerActionMethodItem(
this,
"GetExtenderProviders",
"Get Extender Providers",
true));
items.Add(new DesignerActionMethodItem(
this,
"GetDemoControlReferences",
"Get DemoControl References",
true));
items.Add(new DesignerActionMethodItem(
this,
"GetPathOfAssembly",
"Get Path of Executing Assembly",
true));
items.Add(new DesignerActionMethodItem(
this,
"GetComponentTypes",
"Get ScrollableControl Types",
true));
items.Add(new DesignerActionMethodItem(
this,
"GetToolboxCategories",
"Get Toolbox Categories",
true));
items.Add(new DesignerActionMethodItem(
this,
"SetBackColor",
"Set Back Color",
true));
return items;
}
// This method creates a Timer component using the
// IDesignerHost.CreateComponent method. It also
// creates an event handler for the Timer component's
// tick event.
private void CreateTimer()
{
if (this.host != null)
{
if (this.relatedDesigner.createdTimer == null)
{
// Create and configure the Timer object.
this.relatedDesigner.createdTimer =
this.host.CreateComponent(typeof(Timer)) as Timer;
Timer t = this.relatedDesigner.createdTimer;
t.Interval = 1000;
t.Enabled = true;
EventDescriptorCollection eventColl =
TypeDescriptor.GetEvents(t, new Attribute[0]);
if (eventColl != null)
{
EventDescriptor ed =
eventColl["Tick"] as EventDescriptor;
if (ed != null)
{
PropertyDescriptor epd =
this.relatedDesigner.eventBindingService.GetEventProperty(ed);
epd.SetValue(t, "timer_Tick");
}
}
this.relatedDesigner.actionUiService.Refresh(this.relatedControl);
}
}
}
// This method uses the IEventBindingService.ShowCode
// method to start the Code Editor. It places the caret
// in the timer_tick method created by the CreateTimer method.
private void ShowEventHandlerCode()
{
Timer t = this.relatedDesigner.createdTimer;
if (t != null)
{
EventDescriptorCollection eventColl =
TypeDescriptor.GetEvents(t, new Attribute[0]);
if (eventColl != null)
{
EventDescriptor ed =
eventColl["Tick"] as EventDescriptor;
if (ed != null)
{
this.relatedDesigner.eventBindingService.ShowCode(t, ed);
}
}
}
}
// This method uses the IDesignerHost.DestroyComponent method
// to remove the Timer component from the design environment.
private void RemoveTimer()
{
if (this.host != null)
{
if (this.relatedDesigner.createdTimer != null)
{
this.host.DestroyComponent(
this.relatedDesigner.createdTimer);
this.relatedDesigner.createdTimer = null;
this.relatedDesigner.actionUiService.Refresh(
this.relatedControl);
}
}
}
// This method uses IExtenderListService.GetExtenderProviders
// to enumerate all the extender providers and display them
// in a MessageBox.
private void GetExtenderProviders()
{
if (this.relatedDesigner.listService != null)
{
StringBuilder sb = new StringBuilder();
IExtenderProvider[] providers =
this.relatedDesigner.listService.GetExtenderProviders();
for (int i = 0; i < providers.Length; i++)
{
sb.Append(providers[i].ToString());
sb.Append("\r\n");
}
MessageBox.Show(
sb.ToString(),
"Extender Providers");
}
}
// This method uses the IReferenceService.GetReferences method
// to enumerate all the instances of DemoControl on the
// design surface.
private void GetDemoControlReferences()
{
if (this.relatedDesigner.referenceService != null)
{
StringBuilder sb = new StringBuilder();
object[] refs = this.relatedDesigner.referenceService.GetReferences(typeof(DemoControl));
for (int i = 0; i < refs.Length; i++)
{
sb.Append(refs[i].ToString());
sb.Append("\r\n");
}
MessageBox.Show(
sb.ToString(),
"DemoControl References");
}
}
// This method uses the ITypeResolutionService.GetPathOfAssembly
// method to display the path of the executing assembly.
private void GetPathOfAssembly()
{
if (this.relatedDesigner.typeResService != null)
{
System.Reflection.AssemblyName name =
System.Reflection.Assembly.GetExecutingAssembly().GetName();
MessageBox.Show(
this.relatedDesigner.typeResService.GetPathOfAssembly(name),
"Path of executing assembly");
}
}
// This method uses the IComponentDiscoveryService.GetComponentTypes
// method to find all the types that derive from
// ScrollableControl.
private void GetComponentTypes()
{
if (this.relatedDesigner.componentDiscoveryService != null)
{
ICollection components = this.relatedDesigner.componentDiscoveryService.GetComponentTypes(host, typeof(ScrollableControl));
if (components != null)
{
if (components.Count > 0)
{
StringBuilder sb = new StringBuilder();
IEnumerator e = components.GetEnumerator();
while (e.MoveNext())
{
sb.Append(e.Current.ToString());
sb.Append("\r\n");
}
MessageBox.Show(
sb.ToString(),
"Controls derived from ScrollableControl");
}
}
}
}
// This method uses the IToolboxService.CategoryNames
// method to enumerate all the categories that appear
// in the Toolbox.
private void GetToolboxCategories()
{
if (this.relatedDesigner.toolboxService != null)
{
StringBuilder sb = new StringBuilder();
CategoryNameCollection names = this.relatedDesigner.toolboxService.CategoryNames;
foreach (string name in names)
{
sb.Append(name.ToString());
sb.Append("\r\n");
}
MessageBox.Show(sb.ToString(), "Toolbox Categories");
}
}
// This method sets the shadowed BackColor property on the
// designer. This is the value that is serialized by the
// design environment.
private void SetBackColor()
{
ColorDialog d = new ColorDialog();
if (d.ShowDialog() == DialogResult.OK)
{
this.relatedDesigner.BackColor = d.Color;
}
}
}
' This class defines the designer actions that appear on the control
' that is being designed.
Friend Class DemoActionList
Inherits System.ComponentModel.Design.DesignerActionList
' Cache a reference to the designer host.
Private host As IDesignerHost = Nothing
' Cache a reference to the control.
Private relatedControl As DemoControl = Nothing
' Cache a reference to the designer.
Private relatedDesigner As DemoControlDesigner = Nothing
'The constructor associates the control
'with the designer action list.
Public Sub New(ByVal component As IComponent)
MyBase.New(component)
Me.relatedControl = component '
Me.host = Me.Component.Site.GetService(GetType(IDesignerHost))
Dim dcd As IDesigner = host.GetDesigner(Me.Component)
Me.relatedDesigner = dcd
End Sub
' This method creates and populates the
' DesignerActionItemCollection which is used to
' display designer action items.
Public Overrides Function GetSortedActionItems() As DesignerActionItemCollection
Dim items As New DesignerActionItemCollection()
' If the Timer component has not been created, show the
' "Create Timer" DesignerAction item.
'
' If the Timer component exists, show the timer-related
' options.
If Me.relatedDesigner.createdTimer Is Nothing Then
items.Add(New DesignerActionMethodItem(Me, "CreateTimer", "Create Timer", True))
Else
items.Add(New DesignerActionMethodItem(Me, "ShowEventHandlerCode", "Show Event Handler Code", True))
items.Add(New DesignerActionMethodItem(Me, "RemoveTimer", "Remove Timer", True))
End If
items.Add(New DesignerActionMethodItem(Me, "GetExtenderProviders", "Get Extender Providers", True))
items.Add(New DesignerActionMethodItem(Me, "GetDemoControlReferences", "Get DemoControl References", True))
items.Add(New DesignerActionMethodItem(Me, "GetPathOfAssembly", "Get Path of Executing Assembly", True))
items.Add(New DesignerActionMethodItem(Me, "GetComponentTypes", "Get ScrollableControl Types", True))
items.Add(New DesignerActionMethodItem(Me, "GetToolboxCategories", "Get Toolbox Categories", True))
items.Add(New DesignerActionMethodItem(Me, "SetBackColor", "Set Back Color", True))
Return items
End Function
' This method creates a Timer component using the
' IDesignerHost.CreateComponent method. It also
' creates an event handler for the Timer component's
' tick event.
Private Sub CreateTimer()
If (Me.host IsNot Nothing) Then
If Me.relatedDesigner.createdTimer Is Nothing Then
' Create and configure the Timer object.
Me.relatedDesigner.createdTimer = Me.host.CreateComponent(GetType(Timer))
Dim t As Timer = Me.relatedDesigner.createdTimer
t.Interval = 1000
t.Enabled = True
Dim eventColl As EventDescriptorCollection = TypeDescriptor.GetEvents(t, New Attribute(-1) {})
If (eventColl IsNot Nothing) Then
Dim ed As EventDescriptor = eventColl("Tick")
If (ed IsNot Nothing) Then
Dim epd As PropertyDescriptor = Me.relatedDesigner.eventBindingService.GetEventProperty(ed)
epd.SetValue(t, "timer_Tick")
End If
End If
Me.relatedDesigner.actionUiService.Refresh(Me.relatedControl)
End If
End If
End Sub
' This method uses the IEventBindingService.ShowCode
' method to start the Code Editor. It places the caret
' in the timer_tick method created by the CreateTimer method.
Private Sub ShowEventHandlerCode()
Dim t As Timer = Me.relatedDesigner.createdTimer
If (t IsNot Nothing) Then
Dim eventColl As EventDescriptorCollection = TypeDescriptor.GetEvents(t, New Attribute(-1) {})
If (eventColl IsNot Nothing) Then
Dim ed As EventDescriptor = eventColl("Tick")
If (ed IsNot Nothing) Then
Me.relatedDesigner.eventBindingService.ShowCode(t, ed)
End If
End If
End If
End Sub
' This method uses the IDesignerHost.DestroyComponent method
' to remove the Timer component from the design environment.
Private Sub RemoveTimer()
If (Me.host IsNot Nothing) Then
If (Me.relatedDesigner.createdTimer IsNot Nothing) Then
Me.host.DestroyComponent(Me.relatedDesigner.createdTimer)
Me.relatedDesigner.createdTimer = Nothing
Me.relatedDesigner.actionUiService.Refresh(Me.relatedControl)
End If
End If
End Sub
' This method uses IExtenderListService.GetExtenderProviders
' to enumerate all the extender providers and display them
' in a MessageBox.
Private Sub GetExtenderProviders()
If (Me.relatedDesigner.listService IsNot Nothing) Then
Dim sb As New StringBuilder()
Dim providers As IExtenderProvider() = Me.relatedDesigner.listService.GetExtenderProviders()
Dim i As Integer
For i = 0 To providers.Length - 1
Dim o As Object = providers(i)
sb.Append(o.ToString())
sb.Append(ControlChars.Cr + ControlChars.Lf)
Next i
MessageBox.Show(sb.ToString(), "Extender Providers")
End If
End Sub
' This method uses the IReferenceService.GetReferences method
' to enumerate all the instances of DemoControl on the
' design surface.
Private Sub GetDemoControlReferences()
If (Me.relatedDesigner.referenceService IsNot Nothing) Then
Dim sb As New StringBuilder()
Dim refs As Object() = Me.relatedDesigner.referenceService.GetReferences(GetType(DemoControl))
Dim i As Integer
For i = 0 To refs.Length - 1
sb.Append(refs(i).ToString())
sb.Append(ControlChars.Cr + ControlChars.Lf)
Next i
MessageBox.Show(sb.ToString(), "DemoControl References")
End If
End Sub
' This method uses the ITypeResolutionService.GetPathOfAssembly
' method to display the path of the executing assembly.
Private Sub GetPathOfAssembly()
If (Me.relatedDesigner.typeResService IsNot Nothing) Then
Dim name As System.Reflection.AssemblyName = System.Reflection.Assembly.GetExecutingAssembly().GetName()
MessageBox.Show(Me.relatedDesigner.typeResService.GetPathOfAssembly(name), "Path of executing assembly")
End If
End Sub
' This method uses the IComponentDiscoveryService.GetComponentTypes
' method to find all the types that derive from
' ScrollableControl.
Private Sub GetComponentTypes()
If (Me.relatedDesigner.componentDiscoveryService IsNot Nothing) Then
Dim components As ICollection = Me.relatedDesigner.componentDiscoveryService.GetComponentTypes(host, GetType(ScrollableControl))
If (components IsNot Nothing) Then
If components.Count > 0 Then
Dim sb As New StringBuilder()
Dim e As IEnumerator = components.GetEnumerator()
While e.MoveNext()
sb.Append(e.Current.ToString())
sb.Append(ControlChars.Cr + ControlChars.Lf)
End While
MessageBox.Show(sb.ToString(), "Controls derived from ScrollableControl")
End If
End If
End If
End Sub
' This method uses the IToolboxService.CategoryNames
' method to enumerate all the categories that appear
' in the Toolbox.
Private Sub GetToolboxCategories()
If (Me.relatedDesigner.toolboxService IsNot Nothing) Then
Dim sb As New StringBuilder()
Dim names As CategoryNameCollection = Me.relatedDesigner.toolboxService.CategoryNames
Dim name As String
For Each name In names
sb.Append(name.ToString())
sb.Append(ControlChars.Cr + ControlChars.Lf)
Next name
MessageBox.Show(sb.ToString(), "Toolbox Categories")
End If
End Sub
' This method sets the shadowed BackColor property on the
' designer. This is the value that is serialized by the
' design environment.
Private Sub SetBackColor()
Dim d As New ColorDialog()
If d.ShowDialog() = DialogResult.OK Then
Me.relatedDesigner.BackColor = d.Color
End If
End Sub
End Class
설명
메서드는 GetComponentTypes 인터페이스를 구현하는 형식인 사용 가능한 구성 요소 형식 목록을 검색합니다 IComponent . 매개 변수가 null
이 baseType
면 모든 구성 요소가 검색되고, 그렇지 않으면 에서 baseType
파생된 구성 요소 형식만 반환됩니다.
매개 변수에 대한 designerHost
값을 전달하면 형식 확인의 범위가 로 지정됩니다 designerHost
. 즉, 형식이 디스크에 있고 전역 어셈블리 캐시에 없는 경우 ToolboxItem 해당 형식이 를 통해 designerHost
로드되지 않습니다.
에 null
를 designerHost
전달하면 전역 어셈블리 캐시 또는 메서드에서 쿼리할 수 있는 모든 형식을 Assembly.LoadFrom 반환합니다.
적용 대상
추가 정보
.NET