Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Interfaz ITypeDescriptorContext

 

Publicado: octubre de 2016

Proporciona información contextual sobre un componente, como su contenedor y descriptor de propiedades.

Espacio de nombres:   System.ComponentModel
Ensamblado:  System (en System.dll)

[ComVisibleAttribute(true)]
public interface ITypeDescriptorContext : IServiceProvider

NombreDescripción
System_CAPS_pubpropertyContainer

Obtiene el contenedor que representa este TypeDescriptor solicitud.

System_CAPS_pubpropertyInstance

Obtiene el objeto que está conectado a esta solicitud del descriptor de tipo.

System_CAPS_pubpropertyPropertyDescriptor

Obtiene el PropertyDescriptor que está asociado con el elemento de contexto especificado.

NombreDescripción
System_CAPS_pubmethodGetService(Type)

Obtiene el objeto de servicio del tipo especificado.(Heredado de IServiceProvider).

System_CAPS_pubmethodOnComponentChanged()

Genera el evento ComponentChanged.

System_CAPS_pubmethodOnComponentChanging()

Genera el evento ComponentChanging.

El ITypeDescriptorContext interfaz proporciona información contextual sobre un componente. ITypeDescriptorContext se utiliza normalmente en tiempo de diseño para proporcionar información sobre un contenedor en tiempo de diseño. Esta interfaz se utiliza normalmente en la conversión de tipos. Para obtener información detallada, vea TypeConverter.

System_CAPS_noteNota

No confíe en la presencia de esta interfaz cuando se diseña un convertidor de tipos. Si una interfaz determinada, la propiedad o el servicio es necesario pero no están disponibles, el convertidor de tipos debe devolver null en lugar de producir una excepción. Las propiedades de esta interfaz pueden devolver null en cualquier momento, y debería planear para esto.

En el ejemplo de código siguiente se muestra cómo utilizar el ITypeDescriptorContext interfaz para admitir la conversión de tipo.

namespace Microsoft.Samples.InstanceDescriptorSample
{
    using System;
    using System.ComponentModel;
    using System.ComponentModel.Design.Serialization;
    using System.Drawing;
    using System.Globalization;
    using System.Reflection;

    //  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(typeof(Triangle.TriangleConverter))]
    public class Triangle
    {
        // Triangle members.
        Point P1;
        Point P2;
        Point P3;

        public Point Point1 {
            get {
                return P1;
            }
            set {
                P1 = value;
            }
        }
        public Point Point2 {
            get 
            {
                return P2;
            }
            set 
            {
                P2 = value;
            }
        }
        public Point Point3 {
            get 
            {
                return P3;
            }
            set 
            {
                P3 = value;
            }
        }

        public Triangle(Point point1,Point point2,Point point3) {
            P1 = point1;
            P2 = point2;
            P3 = point3;
        }

        // 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.
        internal class TriangleConverter : TypeConverter
        {
            // This method overrides CanConvertTo from TypeConverter. This is called when someone
            //  wants to convert an instance of Triangle to another type.  Here,
            //  only conversion to an InstanceDescriptor is supported.
            public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
            {
                if (destinationType == typeof(InstanceDescriptor))
                {
                    return true;
                }

                // Always call the base to see if it can perform the conversion.
                return base.CanConvertTo(context, destinationType);
            }

            // This code performs the actual conversion from a Triangle to an InstanceDescriptor.
            public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
            {
                if (destinationType == typeof(InstanceDescriptor))
                {
                    ConstructorInfo ci = typeof(Triangle).GetConstructor(new Type[]{typeof(Point),
                                                    typeof(Point),typeof(Point)});
                    Triangle t = (Triangle) value;
                    return new InstanceDescriptor(ci,new object[]{t.Point1,t.Point2,t.Point3});
                }

                // Always call base, even if you can't convert.
                return base.ConvertTo(context, culture, value, destinationType);
            }
        }
    }

    public class TestComponent : System.ComponentModel.Component 
    {
        Triangle myTriangle;

        public TestComponent() {
            myTriangle = new Triangle(
                new Point(5,5),
                new Point(10,10),
                new Point(1,8)
                );
        }

        public Triangle MyTriangle {
            get {
                return myTriangle;
            }
            set {
                myTriangle = value;
            }
        }
    }
}

.NET Framework
Disponible desde 1.1
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Volver al principio
Mostrar: