IEventBindingService Interfaccia
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Fornisce un servizio per la registrazione dei gestori eventi per gli eventi del componente.
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
- Derivato
- Attributi
Esempio
Nell'esempio seguente viene illustrata una finestra di progettazione che usa per collegare l'evento IEventBindingService di un componente a un gestore eventi in fase di progettazione quando viene richiamato il comando di menu di scelta rapida personalizzato aggiunto dalla finestra di progettazione per il componente. Per usare l'esempio, compilarlo in una libreria di classi, aggiungere un riferimento da un progetto di Windows Forms, aggiungere il componente nella libreria di classi alla casella degli strumenti facendo clic con il pulsante destro del mouse sulla casella degli strumenti e scegliendo Personalizza casella degli strumenti, quindi scegliendo la libreria di classi e facendo clic su OK e aggiungere un'istanza di EventControl a un modulo. Fare quindi clic con il pulsante destro del mouse su EventControl e scegliere il comando di menu di scelta rapida Connect testEvent (Connetti testEvent). Viene creato un metodo del gestore eventi vuoto e il metodo testEvent di EventControl viene inizializzato in questo gestore eventi nel codice di inizializzazione per il form.
#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
Commenti
Il servizio di associazione di eventi consente di collegare un gestore eventi a un evento del componente dal codice della finestra di progettazione.
Per collegare un gestore eventi a un evento del componente usando IEventBindingService, è prima necessario ottenere un EventDescriptor oggetto per l'evento del componente che si intende collegare. Fornisce IEventBindingService metodi che possono convertire un EventDescriptor oggetto in un PropertyDescriptor oggetto che è possibile utilizzare per configurare l'evento con un nome di metodo del gestore eventi.
L'oggetto TypeDescriptor fornisce un GetEvents metodo che è possibile utilizzare per ottenere un EventDescriptorCollection oggetto contenitore EventDescriptor per ogni evento di un componente. I GetEventProperty metodi e GetEventProperties dell'oggetto IEventBindingService restituiscono un PropertyDescriptor oggetto per ogni EventDescriptor metodo passato a entrambi i metodi. Ogni PropertyDescriptor oggetto restituito da GetEventProperty o GetEventProperties ha un tipo di proprietà stringa. È possibile impostare questa stringa su un valore che indica il nome del metodo del gestore eventi per collegare l'evento con usando il SetValue metodo di PropertyDescriptor.
Metodi
CreateUniqueMethodName(IComponent, EventDescriptor) |
Crea un nome univoco per un metodo di gestione degli eventi per il componente e l'evento specificati. |
GetCompatibleMethods(EventDescriptor) |
Ottiene un insieme di metodi di gestione degli eventi dotati di firme di metodo compatibili con l'evento specificato. |
GetEvent(PropertyDescriptor) |
Ottiene un oggetto EventDescriptor per l'evento rappresentato dal descrittore di proprietà specificato, se la proprietà rappresenta un evento. |
GetEventProperties(EventDescriptorCollection) |
Converte un gruppo di descrittori di evento in un gruppo di descrittori di proprietà. |
GetEventProperty(EventDescriptor) |
Converte un singolo descrittore di evento in un descrittore di proprietà. |
ShowCode() |
Visualizza il codice utente per la finestra di progettazione. |
ShowCode(IComponent, EventDescriptor) |
Visualizza il codice utente per l'evento specificato. |
ShowCode(Int32) |
Visualizza il codice utente per la finestra di progettazione corrispondente alla riga specificata. |