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 IEventBindingService

 

Publicado: octubre de 2016

Proporciona un servicio para registrar controladores de eventos de componente.

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

[ComVisibleAttribute(true)]
public interface IEventBindingService

NombreDescripción
System_CAPS_pubmethodCreateUniqueMethodName(IComponent, EventDescriptor)

Crea un nombre único para un método de controlador de eventos para el componente y evento especificados.

System_CAPS_pubmethodGetCompatibleMethods(EventDescriptor)

Obtiene una colección de métodos de controlador de eventos que tienen una firma de método compatible con el evento especificado.

System_CAPS_pubmethodGetEvent(PropertyDescriptor)

Obtiene un EventDescriptor para el evento que representa el descriptor de propiedades especificado, si representa un evento.

System_CAPS_pubmethodGetEventProperties(EventDescriptorCollection)

Convierte un conjunto de descriptores de eventos a un conjunto de descriptores de propiedades.

System_CAPS_pubmethodGetEventProperty(EventDescriptor)

Convierte un único descriptor de eventos en un descriptor de propiedad.

System_CAPS_pubmethodShowCode()

Muestra el código de usuario para el diseñador.

System_CAPS_pubmethodShowCode(IComponent, EventDescriptor)

Muestra el código de usuario para el evento especificado.

System_CAPS_pubmethodShowCode(Int32)

Muestra el código de usuario del diseñador en la línea especificada.

El servicio de enlace de eventos proporciona una manera de vincular un controlador de eventos con un evento de componente desde el código del diseñador.

Para vincular un controlador de eventos con un evento de componente mediante el IEventBindingService, primero debe obtener un EventDescriptor en caso de que el componente que desea vincular. El IEventBindingService proporciona métodos para convertir un EventDescriptor a un PropertyDescriptor que puede utilizar para configurar el evento con un nombre de método de controlador de eventos.

La TypeDescriptor objeto proporciona un GetEvents método que puede utilizar para obtener un EventDescriptorCollection que contiene EventDescriptor objetos para cada evento de un componente. El GetEventProperty y GetEventProperties métodos de la IEventBindingService devolver un PropertyDescriptor para cada EventDescriptor pasó a cada método. Cada PropertyDescriptor devuelto desde GetEventProperty o GetEventProperties tiene un tipo de propiedad de cadena. Esta cadena se puede establecer en un valor que indica el nombre del método controlador de eventos para vincular el evento utilizando la SetValue método de la PropertyDescriptor.

En el ejemplo siguiente se muestra un diseñador que utiliza el IEventBindingService para vincular un evento del componente con un controlador de eventos en tiempo de diseño cuando se invoca el comando de menú contextual personalizado que el diseñador agrega para el componente. Para utilizar el ejemplo, compílelo en una biblioteca de clases, agregue una referencia desde un proyecto de formularios Windows Forms, agregar el componente en la biblioteca de clases al cuadro de herramientas con el botón secundario del cuadro de herramientas y seleccione Personalizar cuadro de herramientas..., seleccione la biblioteca de clases y haciendo clic en Aceptar y agregar una instancia de EventControl a un formulario. A continuación, haga clic en EventControl y haga clic en el comando Connect testEvent del menú contextual. Se crea un método de controlador de eventos vacío y el método testEvent de EventControl se inicializa con este controlador de eventos en el código de inicialización para el formulario.

using System;
using System.Collections;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.Windows.Forms.Design;

namespace EventDesignerTest
{
    // This designer provides a "Connect testEvent" designer verb shortcut 
    // menu command. When invoked, the command attaches a new event-handler 
    // method named "testEventHandler" to the "testEvent" event of an 
    // associated control.
    // If a "testEvent" event of the associated control does not exist, 
    // the IEventBindingService declares it.
    [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")] 
    public class EventDesigner : System.Windows.Forms.Design.ControlDesigner
    {
        public EventDesigner()
        {
        }

        // When the "Connect testEvent" designer verb shortcut menu 
        // command is invoked, this method uses the 
        // IEventBindingService to attach an event handler to a 
        // "textEvent" event of the associated control.
        private void ConnectEvent(object sender, EventArgs e)
        {
            IEventBindingService eventservice = (IEventBindingService)this.Component.Site.GetService(typeof(System.ComponentModel.Design.IEventBindingService));
            if( eventservice != null )
            {
                // Attempt to obtain a PropertyDescriptor for a 
                // component event named "testEvent".
                EventDescriptorCollection edc = TypeDescriptor.GetEvents(this.Component);				
                if( edc == null || edc.Count == 0 )
                    return;

                EventDescriptor ed = null;
                // Search for an event named "testEvent".
                foreach(EventDescriptor edi in edc)
                    if(edi.Name == "testEvent")
                    {
                        ed = edi;
                        break;
                    }
                if( ed == null )
                    return;

                // Use the IEventBindingService to get a 
                // PropertyDescriptor for the event.
                PropertyDescriptor pd = eventservice.GetEventProperty(ed);
                if( pd == null )
                    return;				

                // Set the value of the event to "testEventHandler".
                pd.SetValue(this.Component, "testEventHandler");
            }
        }

                // Provides a designer verb command for the designer's 
                // shortcut menu.
        public override System.ComponentModel.Design.DesignerVerbCollection Verbs
        {
            get
            {
                DesignerVerbCollection dvc = new DesignerVerbCollection();
                dvc.Add(new DesignerVerb("Connect testEvent", new EventHandler(ConnectEvent)));
                return dvc;
            }
        }
    }

    // EventControl is associated with the EventDesigner and displays 
    // instructions for demonstrating the service.
    [Designer(typeof(EventDesigner))]
    public class EventControl : System.Windows.Forms.UserControl
    {
        public event System.EventHandler testEvent;

        public EventControl()
        {		
            this.BackColor = Color.White;	
            this.Size = new Size(320, 96);
        }

        protected override void Dispose( bool disposing )
        {
            base.Dispose( disposing );
        }

        protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
        {
            e.Graphics.DrawString("IEventBindingService Example Control", new Font(FontFamily.GenericMonospace, 10), new SolidBrush(Color.Blue), 5, 5);

            e.Graphics.DrawString("Use the \"Connect testEvent\" command of the", new Font(FontFamily.GenericMonospace, 8), new SolidBrush(Color.Black), 5, 22);
            e.Graphics.DrawString("right-click shortcut menu provided by this", new Font(FontFamily.GenericMonospace, 8), new SolidBrush(Color.Black), 5, 32);
            e.Graphics.DrawString("control's associated EventDesigner to create", new Font(FontFamily.GenericMonospace, 8), new SolidBrush(Color.Black), 5, 42);
            e.Graphics.DrawString("a new event handler linked with the testEvent", new Font(FontFamily.GenericMonospace, 8), new SolidBrush(Color.Black), 5, 52);
            e.Graphics.DrawString("of this control in the initialization code", new Font(FontFamily.GenericMonospace, 8), new SolidBrush(Color.Black), 5, 62);
            e.Graphics.DrawString("for this control.", new Font(FontFamily.GenericMonospace, 8), new SolidBrush(Color.Black), 5, 72);
        }
    }
}

.NET Framework
Disponible desde 1.1
Volver al principio
Mostrar: