Ler em inglês

Partilhar via


IEventBindingService Interface

Definição

Fornece um serviço para o registro de manipuladores de eventos para eventos do componente.

public interface IEventBindingService
[System.Runtime.InteropServices.ComVisible(true)]
public interface IEventBindingService
Derivado
Atributos

Exemplos

O exemplo a seguir demonstra um designer que usa o para vincular o IEventBindingService evento de um componente com um manipulador de eventos em tempo de design quando o comando de menu de atalho personalizado que o designer adiciona para o componente é invocado. Para usar o exemplo, compile-o em uma biblioteca de classes, adicione uma referência de um projeto Windows Forms, adicione o componente na biblioteca de classes à Caixa de Ferramentas clicando com o botão direito do mouse na Caixa de Ferramentas e selecionando Personalizar Caixa de Ferramentas, escolhendo a biblioteca de classes e clicando em OK e adicione uma instância do EventControl a um Formulário. Em seguida, clique com o botão direito do mouse no EventControl e clique no comando de menu de atalho Conectar testEvent. Um método de manipulador de eventos vazio é criado e o método testEvent do EventControl é inicializado para esse manipulador de eventos no código de inicialização do Formulário.

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.
    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);
        }
    }
}

Comentários

O serviço de associação de eventos fornece uma maneira de vincular um manipulador de eventos a um evento de componente do código do designer.

Para vincular um manipulador de eventos a um evento de componente usando o IEventBindingService, primeiro você deve obter um EventDescriptor para o evento do componente que você pretende vincular. O IEventBindingService fornece métodos que podem converter um EventDescriptor em um PropertyDescriptor que você pode usar para configurar o evento com um nome de método do manipulador de eventos.

O TypeDescriptor objeto fornece um GetEvents método que você pode usar para obter um EventDescriptorCollection objeto que EventDescriptor contém para cada evento de um componente. Os GetEventProperty métodos e GetEventProperties do IEventBindingService retornam um PropertyDescriptor para cada EventDescriptor um passado para qualquer método. Cada PropertyDescriptor um retornado de GetEventProperty ou GetEventProperties tem um tipo de propriedade de cadeia de caracteres. Você pode definir essa cadeia de caracteres como um valor que indica o nome do método de manipulador de eventos para vincular o evento ao usando o SetValue método do PropertyDescriptor.

Métodos

CreateUniqueMethodName(IComponent, EventDescriptor)

Cria um nome exclusivo para um método do manipulador de eventos para o componente e o evento especificados.

GetCompatibleMethods(EventDescriptor)

Obtém uma coleção de métodos de manipulador de eventos que têm uma assinatura de método compatível com o evento especificado.

GetEvent(PropertyDescriptor)

Obtém um EventDescriptor para o evento que o descritor de propriedade especificado representa, se ele representar um evento.

GetEventProperties(EventDescriptorCollection)

Converte um conjunto de descritores de eventos em um conjunto de descritores de propriedades.

GetEventProperty(EventDescriptor)

Converte um único descritor de eventos em um descritor de propriedades.

ShowCode()

Exibe o código do usuário para o designer.

ShowCode(IComponent, EventDescriptor)

Exibe o código do usuário para o evento especificado.

ShowCode(Int32)

Exibe o código do usuário para o designer na linha especificada.

Aplica-se a

Confira também