This documentation is archived and is not being maintained.

ITypeDescriptorContext Interface

Provides contextual information about a component, such as its container and property descriptor.

Namespace:  System.ComponentModel
Assembly:  System (in System.dll)

'Declaration
<ComVisibleAttribute(True)> _
Public Interface ITypeDescriptorContext _
	Inherits IServiceProvider
'Usage
Dim instance As ITypeDescriptorContext

The ITypeDescriptorContext interface provides contextual information about a component. ITypeDescriptorContext is typically used at design time to provide information about a design-time container. This interface is commonly used in type conversion. For details, see TypeConverter.

NoteNote:

Do not rely on the presence of this interface when you design a type converter. If a particular interface, property, or service is necessary but not available, the type converter should return Nothing rather than throw an exception. This interface's properties can return Nothing at any time, and you should plan for this.

The following code example demonstrates how to use the ITypeDescriptorContext interface to support type conversion.

Imports System
Imports System.ComponentModel
Imports System.ComponentModel.Design.Serialization
Imports System.Drawing
Imports System.Globalization
Imports System.Reflection
Namespace Microsoft.Samples.InstanceDescriptorSample

   '  This sample shows how to support code generation for a custom type  
   '  of object using a type converter and InstanceDescriptor objects. 
   
   '  To use this code, copy it to a file and add the file to a project.   
   '  Then add a component to the project and declare a Triangle field and  
   '  a public property with accessors for the Triangle field on the component. 
   
   '  The Triangle property will be persisted using code generation.

   <TypeConverter(GetType(Triangle.TriangleConverter))> _
   Public Class Triangle
      ' Triangle members. 
      Private P1 As Point
      Private P2 As Point
      Private P3 As Point

      Public Property Point1() As Point
         Get 
            Return P1
         End Get 
         Set(ByVal Value As Point)
            P1 = Value
         End Set 
      End Property 

      Public Property Point2() As Point
         Get 
            Return P2
         End Get 
         Set(ByVal Value As Point)
            P2 = Value
         End Set 
      End Property 

      Public Property Point3() As Point
         Get 
            Return P3
         End Get 
         Set(ByVal Value As Point)
            P3 = Value
         End Set 
      End Property 

      Public Sub New(ByVal point1 As Point, ByVal point2 As Point, ByVal point3 As Point)
         P1 = point1
         P2 = point2
         P3 = point3
      End Sub 'New 

      ' A TypeConverter for the Triangle object.  Note that you can make it internal, 
      '  private, or any scope you want and the designers will still be able to use 
      '  it through the TypeDescriptor object.  This type converter provides the 
      '  capability to convert to an InstanceDescriptor.  This object can be used by  
      '  the .NET Framework to generate source code that creates an instance of a  
      '  Triangle object. 

      Friend Class TriangleConverter
         Inherits TypeConverter

         ' This method overrides CanConvertTo from TypeConverter.  This is called when someone 
         '  wants to convert an instance of Triangle to another type.  Here, 
         '  only coversition to an InstanceDescriptor is supported. 
         Public Overloads Overrides Function CanConvertTo(ByVal context As ITypeDescriptorContext, ByVal destinationType As Type) As Boolean 
            If destinationType Is GetType(InstanceDescriptor) Then 
               Return True 
            End If 

            ' Always call the base to see if it can perform the conversion. 
            Return MyBase.CanConvertTo(context, destinationType)
         End Function 

         ' This code performs the actual conversion from a Triangle to an InstanceDescriptor. 
         Public Overloads Overrides Function ConvertTo(ByVal context As ITypeDescriptorContext, ByVal culture As CultureInfo, ByVal value As Object, ByVal destinationType As Type) As Object
            If destinationType Is GetType(InstanceDescriptor) Then 
               Dim ci As ConstructorInfo = GetType(Triangle).GetConstructor(New Type() {GetType(Point), GetType(Point), GetType(Point)})
               Dim t As Triangle = CType(value, Triangle)
               Return New InstanceDescriptor(ci, New Object() {t.Point1, t.Point2, t.Point3})
            End If 

            ' Always call base, even if you can't convert. 
            Return MyBase.ConvertTo(context, culture, value, destinationType)
         End Function  
      End Class  
   End Class  

   Public Class TestComponent
      Inherits System.ComponentModel.Component
      Private myTriangleProp As Triangle

      Public Sub New()
         myTriangleProp = New Triangle(New Point(5, 5), _
                                    New Point(10, 10), New Point(1, 8))
      End Sub 

      Public Property MyTriangle() As Triangle
         Get 
            Return myTriangleProp
         End Get 
         Set(ByVal Value As Triangle)
            myTriangleProp = Value
         End Set 
      End Property 

   End Class 

End Namespace

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 3.5, 3.0, 2.0, 1.1, 1.0
Show: