Как мне назначить обработчик события в C ++ / CLI? - PullRequest
6 голосов
/ 09 февраля 2011

Как добавить «события» к «событию» / делегату?Какой синтаксис?То же самое в C ++ / CLI и в C #?

Ответы [ 3 ]

12 голосов
/ 15 апреля 2013

1: Если нижний этап события является пользовательским, вы определяете себя как член класса (пример из MSDN ):

delegate void Del(int, float);
ref class EventReceiver {
public:
    void Handler(int i , float f) {  }
};
myEventSource->MyEvent += gcnew Del(myEventReceiver, &EventReceiver::Handler);

2: Если базовый делегатявляется глобальным обработчиком и имеет стандартную подпись для событий .NET (объект + аргументы событий) (из ответа DPD):

delegate void MyOwnEventHandler(Object^ sender, EventArgs^ e) { }  
myEventSource->MyEvent += gcnew EventHandler(MyOwnEventHandler);  

3: если базовый делегат имеет стандартную подпись для событий .NET иОбработчик события - это метод класса:

ref class EventReceiver {
public:
   void Handler(Object^ sender, EventArgs^ e) {  }
};
myEventSource->MyEvent += gcnew EventHandler(myEventReceiver, &EventReceiver::Handler);

4: Использование универсального System :: EventHandler (который принимает параметр аргумента MyEventArgs) в качестве основного делегата:

ref class EventReceiver {
public:
   void Handler(Object^ sender, MyEventArgs^ e) {  }
};
myEventSource->MyEvent += gcnew EventHandler<MyEventArgs^>(this, &EventReceiver::DataReceived);
11 голосов
/ 09 февраля 2011

В вы делаете это с оператором +=:

someObj.SomeEvent += new EventHandler(Blah_SomeEvent);

...

private void Blah_SomeEvent(object sender, EventArgs e)
{
}

Больше года-later-edit

Прошло много времени с тех пор, как я отправил этот ответ, и кто-то заметил меня, что, возможно, это было неправильно.Я действительно не знаю, почему ОП пометил мой ответ как правильный (возможно, ОП искал этот синтаксис, а не ? Кто знает сейчас) .

В любом случае, в это будет:

someObj->SomeEvent+= gcnew EventHandler(this, &Blah_SomeEvent);
6 голосов
/ 13 февраля 2011

Синтаксис для C ++ / CLI:

delegate void MyOwnEventHandler(Object^ sender, Eventargs^ e)
{

}

, чтобы зарегистрировать это для события:

objectPtr->MyEvent += gcnew EventHandler(MyOwnEventHandler);
...