IEventBindingService Interfaz
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Proporciona un servicio para registrar los controladores de eventos de los eventos de los componentes.
public interface class IEventBindingService
public interface IEventBindingService
[System.Runtime.InteropServices.ComVisible(true)]
public interface IEventBindingService
type IEventBindingService = interface
[<System.Runtime.InteropServices.ComVisible(true)>]
type IEventBindingService = interface
Public Interface IEventBindingService
- Derivado
- Atributos
Ejemplos
En el ejemplo siguiente se muestra un diseñador que usa para vincular el IEventBindingService evento de un componente con un controlador de eventos en tiempo de diseño cuando se invoca el comando de menú contextual personalizado que agrega el diseñador para el componente. Para usar el ejemplo, compilelo en una biblioteca de clases, agregue una referencia desde un proyecto de Windows Forms, agregue el componente de la biblioteca de clases al Cuadro de herramientas haciendo clic con el botón derecho en el Cuadro de herramientas y seleccionando Personalizar cuadro de herramientas, eligiendo la biblioteca de clases y haciendo clic en Aceptar y agregue una instancia de EventControl a un formulario. A continuación, haga clic con el botón derecho en EventControl y haga clic en el comando de menú contextual Conectar testEvent. Se crea un método de controlador de eventos vacío y el método testEvent de EventControl se inicializa en este controlador de eventos en el código de inicialización del formulario.
#using <System.Windows.Forms.dll>
#using <System.Data.dll>
#using <System.Drawing.dll>
#using <System.Design.dll>
#using <System.dll>
using namespace System;
using namespace System::Collections;
using namespace System::ComponentModel;
using namespace System::ComponentModel::Design;
using namespace System::Drawing;
using namespace System::Data;
using namespace System::Windows::Forms;
using namespace System::Windows::Forms::Design;
using namespace System::Security::Permissions;
// 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 ref class EventDesigner: public 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 = dynamic_cast<IEventBindingService^>(this->Component->Site->GetService( System::ComponentModel::Design::IEventBindingService::typeid ));
if ( eventservice != nullptr )
{
// Attempt to obtain a PropertyDescriptor for a
// component event named "testEvent".
EventDescriptorCollection^ edc = TypeDescriptor::GetEvents( this->Component );
if ( edc == nullptr || edc->Count == 0 )
return;
EventDescriptor^ ed = nullptr;
// Search for an event named "testEvent".
IEnumerator^ myEnum = edc->GetEnumerator();
while ( myEnum->MoveNext() )
{
EventDescriptor^ edi = safe_cast<EventDescriptor^>(myEnum->Current);
if ( edi->Name->Equals( "testEvent" ) )
{
ed = edi;
break;
}
}
if ( ed == nullptr )
return;
// Use the IEventBindingService to get a
// PropertyDescriptor for the event.
PropertyDescriptor^ pd = eventservice->GetEventProperty( ed );
if ( pd == nullptr )
return;
// Set the value of the event to "testEventHandler".
pd->SetValue( this->Component, "testEventHandler" );
}
}
public:
property System::ComponentModel::Design::DesignerVerbCollection^ Verbs
{
// Provides a designer verb command for the designer's
// shortcut menu.
[PermissionSetAttribute(SecurityAction::Demand, Name="FullTrust")]
virtual System::ComponentModel::Design::DesignerVerbCollection^ get() override
{
DesignerVerbCollection^ dvc = gcnew DesignerVerbCollection;
dvc->Add( gcnew DesignerVerb( "Connect testEvent",gcnew EventHandler( this, &EventDesigner::ConnectEvent ) ) );
return dvc;
}
}
};
// EventControl is associated with the EventDesigner and displays
// instructions for demonstrating the service.
[Designer(EventDesigner::typeid)]
public ref class EventControl: public System::Windows::Forms::UserControl
{
public:
event System::EventHandler^ testEvent;
EventControl()
{
this->BackColor = Color::White;
this->Size = System::Drawing::Size( 320, 96 );
}
public:
~EventControl()
{
}
protected:
virtual void OnPaint( System::Windows::Forms::PaintEventArgs^ e ) override
{
e->Graphics->DrawString( "IEventBindingService Example Control", gcnew System::Drawing::Font( FontFamily::GenericMonospace,10 ), gcnew SolidBrush( Color::Blue ), 5, 5 );
e->Graphics->DrawString( "Use the \"Connect testEvent\" command of the", gcnew System::Drawing::Font( FontFamily::GenericMonospace,8 ), gcnew SolidBrush( Color::Black ), 5, 22 );
e->Graphics->DrawString( "right-click shortcut menu provided by this", gcnew System::Drawing::Font( FontFamily::GenericMonospace,8 ), gcnew SolidBrush( Color::Black ), 5, 32 );
e->Graphics->DrawString( "control's associated EventDesigner to create", gcnew System::Drawing::Font( FontFamily::GenericMonospace,8 ), gcnew SolidBrush( Color::Black ), 5, 42 );
e->Graphics->DrawString( "a new event handler linked with the testEvent", gcnew System::Drawing::Font( FontFamily::GenericMonospace,8 ), gcnew SolidBrush( Color::Black ), 5, 52 );
e->Graphics->DrawString( "of this control in the initialization code", gcnew System::Drawing::Font( FontFamily::GenericMonospace,8 ), gcnew SolidBrush( Color::Black ), 5, 62 );
e->Graphics->DrawString( "for this control.", gcnew System::Drawing::Font( FontFamily::GenericMonospace,8 ), gcnew SolidBrush( Color::Black ), 5, 72 );
}
};
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);
}
}
}
Imports System.Collections
Imports System.ComponentModel
Imports System.ComponentModel.Design
Imports System.Data
Imports System.Drawing
Imports System.Windows.Forms
Imports 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.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
Public Class EventDesigner
Inherits System.Windows.Forms.Design.ControlDesigner
Public Sub New()
End Sub
' 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 Sub ConnectEvent(ByVal sender As Object, ByVal e As EventArgs)
Dim eventservice As IEventBindingService = CType(Me.Component.Site.GetService(GetType(System.ComponentModel.Design.IEventBindingService)), IEventBindingService)
If (eventservice IsNot Nothing) Then
' Attempt to obtain a PropertyDescriptor for a
' component event named "testEvent".
Dim edc As EventDescriptorCollection = TypeDescriptor.GetEvents(Me.Component)
If edc Is Nothing Or edc.Count = 0 Then
Return
End If
Dim ed As EventDescriptor = Nothing
' Search for an event named "testEvent".
Dim edi As EventDescriptor
For Each edi In edc
If edi.Name = "testEvent" Then
ed = edi
Exit For
End If
Next edi
If ed Is Nothing Then
Return
End If
' Use the IEventBindingService to get a
' PropertyDescriptor for the event.
Dim pd As PropertyDescriptor = eventservice.GetEventProperty(ed)
If pd Is Nothing Then
Return
End If
' Set the value of the event to "testEventHandler".
pd.SetValue(Me.Component, "testEventHandler")
End If
End Sub
' Provides a designer verb command for the designer's
' shortcut menu.
Public Overrides ReadOnly Property Verbs() As System.ComponentModel.Design.DesignerVerbCollection
Get
Dim dvc As New DesignerVerbCollection()
dvc.Add(New DesignerVerb("Connect testEvent", New EventHandler(AddressOf ConnectEvent)))
Return dvc
End Get
End Property
End Class
' EventControl is associated with the EventDesigner and displays
' instructions for demonstrating the service.
<Designer(GetType(EventDesigner))> _
Public Class EventControl
Inherits System.Windows.Forms.UserControl
Public Event testEvent As System.EventHandler
Public Sub New()
Me.BackColor = Color.White
Me.Size = New Size(320, 96)
End Sub
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
MyBase.Dispose(disposing)
End Sub
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
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)
End Sub
End Class
End Namespace
Comentarios
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 IEventBindingService, primero debe obtener un EventDescriptor para el evento del componente que pretende vincular. IEventBindingService Proporciona métodos que pueden convertir en EventDescriptor un PropertyDescriptor objeto que puede usar para configurar el evento con un nombre de método de controlador de eventos.
El TypeDescriptor objeto proporciona un GetEvents método que se puede usar para obtener un EventDescriptorCollection objeto contenedor EventDescriptor para cada evento de un componente. Los GetEventProperty métodos y GetEventProperties de IEventBindingService devuelven un PropertyDescriptor para cada EventDescriptor uno pasado a cualquiera de los métodos. Cada PropertyDescriptor devuelto de GetEventProperty o GetEventProperties tiene un tipo de propiedad de cadena. Puede establecer esta cadena en un valor que indique el nombre del método de controlador de eventos para vincular el evento con mediante el SetValue método de PropertyDescriptor.
Métodos
CreateUniqueMethodName(IComponent, EventDescriptor) |
Crea un nombre único para un método de control de eventos para el componente y evento especificados. |
GetCompatibleMethods(EventDescriptor) |
Obtiene una colección de métodos de control de eventos que tienen una firma de método compatible con el evento especificado. |
GetEvent(PropertyDescriptor) |
Obtiene un objeto EventDescriptor para el evento que representa el descriptor de propiedades especificado, si representa un evento. |
GetEventProperties(EventDescriptorCollection) |
Convierte un conjunto de descriptores de eventos en un conjunto de descriptores de propiedades. |
GetEventProperty(EventDescriptor) |
Convierte un único descriptor de eventos en un descriptor de propiedades. |
ShowCode() |
Muestra el código de usuario del diseñador. |
ShowCode(IComponent, EventDescriptor) |
Muestra el código de usuario del evento especificado. |
ShowCode(Int32) |
Muestra el código de usuario del diseñador en la línea especificada. |