IEventBindingService Interface

 

Provides a service for registering event handlers for component events.

Namespace:   System.ComponentModel.Design
Assembly:  System (in System.dll)

[ComVisibleAttribute(true)]
public interface class IEventBindingService

NameDescription
System_CAPS_pubmethodCreateUniqueMethodName(IComponent^, EventDescriptor^)

Creates a unique name for an event-handler method for the specified component and event.

System_CAPS_pubmethodGetCompatibleMethods(EventDescriptor^)

Gets a collection of event-handler methods that have a method signature compatible with the specified event.

System_CAPS_pubmethodGetEvent(PropertyDescriptor^)

Gets an EventDescriptor for the event that the specified property descriptor represents, if it represents an event.

System_CAPS_pubmethodGetEventProperties(EventDescriptorCollection^)

Converts a set of event descriptors to a set of property descriptors.

System_CAPS_pubmethodGetEventProperty(EventDescriptor^)

Converts a single event descriptor to a property descriptor.

System_CAPS_pubmethodShowCode()

Displays the user code for the designer.

System_CAPS_pubmethodShowCode(IComponent^, EventDescriptor^)

Displays the user code for the specified event.

System_CAPS_pubmethodShowCode(Int32)

Displays the user code for the designer at the specified line.

The event binding service provides a way to link an event handler with a component event from designer code.

To link an event handler with a component event using the IEventBindingService, you must first obtain an EventDescriptor for the event of the component you intend to link. The IEventBindingService provides methods that can convert an EventDescriptor to a PropertyDescriptor which you can use to configure the event with an event handler method name.

The TypeDescriptor object provides a GetEvents method that you can use to obtain an EventDescriptorCollection containing EventDescriptor objects for each event of a component. The GetEventProperty and GetEventProperties methods of the IEventBindingService return a PropertyDescriptor for each EventDescriptor passed to either method. Each PropertyDescriptor returned from GetEventProperty or GetEventProperties has a property type of string. You can set this string to a value that indicates the name of the event-handler method to link the event with using the SetValue method of the PropertyDescriptor.

The following example demonstrates a designer that uses the IEventBindingService to link a component's event with an event handler at design time when the custom shortcut menu command that the designer adds for the component is invoked. To use the example, compile it to a class library, add a reference from a Windows Forms project, add the component in the class library to the Toolbox by right-clicking the Toolbox and selecting Customize Toolbox..., then choosing the class library and clicking OK, and add an instance of the EventControl to a Form. Then right-click the EventControl and click the Connect testEvent shortcut menu command. An empty event handler method is created and the EventControl's testEvent method is initialized to this event handler in the initialization code for the 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 );
   }
};

.NET Framework
Available since 1.1
Return to top
Show: