IEventBindingService 接口

定义

为注册组件事件的事件处理程序提供服务。

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
派生
属性

示例

下面的示例演示了一个设计器,该设计器在调用设计器为组件添加的自定义快捷菜单命令时,在设计时使用 IEventBindingService 将组件的 事件与事件处理程序链接。 若要使用该示例,请将其编译到类库,从Windows 窗体项目添加引用,通过右键单击“工具箱”并选择“自定义工具箱”,选择类库并单击“确定”,将类库中的组件添加到“工具箱”,然后将 EventControl 的实例添加到窗体。 然后右键单击 EventControl,然后单击“连接 testEvent”快捷菜单命令。 将创建一个空事件处理程序方法,并在 Form 的初始化代码中将 EventControl 的 testEvent 方法初始化为此事件处理程序。

#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

注解

事件绑定服务提供了一种将事件处理程序与设计器代码中的组件事件链接的方法。

若要使用 IEventBindingService将事件处理程序与组件事件链接,必须先获取 EventDescriptor 要链接的组件的 事件的 。 IEventBindingService提供可将 转换为 EventDescriptor 的方法,PropertyDescriptor你可以使用该方法通过事件处理程序方法名称配置事件。

对象 TypeDescriptor 提供了一个 GetEvents 方法,可用于获取 EventDescriptorCollection 组件的每个事件的包含 EventDescriptor 对象。 GetEventPropertyIEventBindingServiceGetEventProperties 方法为传递给任一PropertyDescriptor方法的每个 EventDescriptor 返回 。 从 GetEventPropertyGetEventProperties 返回的每个都具有PropertyDescriptor字符串的属性类型。 可以将此字符串设置为一个值,该值指示使用 SetValue 的 方法将事件与 链接的事件处理程序方法 PropertyDescriptor的名称。

方法

CreateUniqueMethodName(IComponent, EventDescriptor)

为指定组件和事件的事件处理程序方法创建唯一的名称。

GetCompatibleMethods(EventDescriptor)

获取其方法签名与指定事件兼容的事件处理程序方法的集合。

GetEvent(PropertyDescriptor)

为指定属性说明符(如果它表示事件)所表示的事件获取 EventDescriptor

GetEventProperties(EventDescriptorCollection)

将一组事件说明符转换为一组属性说明符。

GetEventProperty(EventDescriptor)

将单个事件说明符转换为属性说明符。

ShowCode()

显示设计器的用户代码。

ShowCode(IComponent, EventDescriptor)

显示指定事件的用户代码。

ShowCode(Int32)

在指定行显示设计器的用户代码。

适用于

另请参阅