Visual C++ .NET/Delegate/Event

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Event firer and handler

<source lang="csharp">

  1. include "stdafx.h"

using namespace System; ref class MyEventArgs : EventArgs {

  public:
    property String^ Info;
    MyEventArgs(String^ info)
    {
       Info = info;
    }

}; delegate void MyEventHandler(Object^ sender, MyEventArgs^ args); ref class EventSender {

  public:
  event MyEventHandler^ MyEvent;
  void Fire(MyEventArgs^ args)
  {
     MyEvent(this, args);
  }

};

ref class EventReceiver {

  public:
     void OnMyEvent(Object^ sender, MyEventArgs^ args)
     {
        Console::WriteLine("My Event with info: " + args->Info );
     }
     void SetUpToReceive(EventSender^ sender)
     {
         sender->MyEvent += gcnew MyEventHandler(this, &EventReceiver::OnMyEvent);
     }

};

int main() {

   EventReceiver^ receiver = gcnew EventReceiver();
   EventSender^ sender = gcnew EventSender();
   receiver->SetUpToReceive(sender);
   MyEventArgs^ myargs = gcnew MyEventArgs("abc");
   sender->Fire(myargs);

}

 </source>


event type

<source lang="csharp">

  1. include "stdafx.h"

using namespace System; ref class MyEventArgs : EventArgs {

  public:
    property String^ Info;
    MyEventArgs(String^ info)
    {
       Info = info;
    }

}; delegate void MyEventHandler(Object^ sender, MyEventArgs^ args); ref class EventSender {

  public:
  event MyEventHandler^ MyEvent;
  void Fire(MyEventArgs^ args)
  {
     MyEvent(this, args);
  }

};

ref class EventReceiver {

  public:
     void OnMyEvent(Object^ sender, MyEventArgs^ args)
     {
        Console::WriteLine("My Event with info: " + args->Info );
     }
     void SetUpToReceive(EventSender^ sender)
     {
         sender->MyEvent += gcnew MyEventHandler(this, &EventReceiver::OnMyEvent);
     }

};

int main() {

   EventReceiver^ receiver = gcnew EventReceiver();
   EventSender^ sender = gcnew EventSender();
   receiver->SetUpToReceive(sender);
   MyEventArgs^ myargs = gcnew MyEventArgs("abc");
   sender->Fire(myargs);

}

 </source>


Extends EventArgs

<source lang="csharp">

  1. include "stdafx.h"

using namespace System; ref class MyEventArgs : EventArgs {

  public:
    property String^ Info;
    MyEventArgs(String^ info)
    {
       Info = info;
    }

}; delegate void MyEventHandler(Object^ sender, MyEventArgs^ args); ref class EventSender {

  public:
  event MyEventHandler^ MyEvent;
  void Fire(MyEventArgs^ args)
  {
     MyEvent(this, args);
  }

};

ref class EventReceiver {

  public:
     void OnMyEvent(Object^ sender, MyEventArgs^ args)
     {
        Console::WriteLine("My Event with info: " + args->Info );
     }
     void SetUpToReceive(EventSender^ sender)
     {
         sender->MyEvent += gcnew MyEventHandler(this, &EventReceiver::OnMyEvent);
     }

};

int main() {

   EventReceiver^ receiver = gcnew EventReceiver();
   EventSender^ sender = gcnew EventSender();
   receiver->SetUpToReceive(sender);
   MyEventArgs^ myargs = gcnew MyEventArgs("abc");
   sender->Fire(myargs);

}

 </source>


Fire events and event handlers

<source lang="csharp">

  1. include "stdafx.h"

using namespace System; using namespace System::Threading; ref class MyEventArgs : EventArgs {

  public:
    property String^ Info;
    MyEventArgs(String^ info)
    {
       Info = info;
    }

}; delegate void MyEventHandler(Object^ sender, MyEventArgs^ args);

ref class Events {

  public:
     event EventHandler^ Start;
     event EventHandler^ Exit;
     void RaiseStartEvent()
     {
         Start(this, gcnew EventArgs());
     }
     void RaiseExitEvent()
     {
         Exit(this, gcnew EventArgs());
     }
     void OnStart(Object^ sender, EventArgs^ args)
     {
        Console::WriteLine("Starting");
     }
     void OnExit(Object^ sender, EventArgs^ args)
     {
         Console::WriteLine("Exiting");
     }

}; void f(Events^ e) {

  e->RaiseStartEvent();
  Console::WriteLine("Doing something.");
  e->RaiseExitEvent();

} int main() {

   Events^ events = gcnew Events();
   // add the event handlers for Start and Exit
   events->Start += gcnew EventHandler(events, &Events::OnStart);
   events->Exit += gcnew EventHandler(events, &Events::OnExit);
   f(events);
   // remove the event handlers
   events->Start -= gcnew EventHandler(events, &Events::OnStart);
   events->Exit -= gcnew EventHandler(events, &Events::OnExit);

}

 </source>


Register event handler

<source lang="csharp">

  1. include "stdafx.h"

using namespace System; ref class EventSender{

  public:
  event EventHandler^ MyEvent;
  void Fire(EventArgs^ args)
  {
     MyEvent(this, args);
  }

}; ref class EventReceiver{

  public:
     void OnMyEvent(Object^ sender, EventArgs^ args){
        Console::WriteLine("My Event");
     }
     void AddHandler(EventSender^ sender){
         sender->MyEvent += gcnew EventHandler(this, &EventReceiver::OnMyEvent);
     }

}; int main(){

   EventReceiver^ receiver = gcnew EventReceiver();
   EventSender^ sender = gcnew EventSender();
   receiver->AddHandler(sender);
   EventArgs^ args = gcnew EventArgs();
   sender->Fire(args);

}

 </source>