Для типа делегата EventHandler в качестве второго аргумента требуется объект типа EventArgs, а не строка. Быстрый способ решить вашу проблему - объявить собственный тип делегата:
public:
delegate void SomeEventHandler(String^ message);
event SomeEventHandler^ someEvent;
Но это не так. NET способ. То, что начинается с создания собственного маленького вспомогательного класса, полученного из EventArgs, для хранения любых пользовательских аргументов события:
public ref class MyEventArgs : EventArgs {
String^ message;
public:
MyEventArgs(String^ arg) {
message = arg;
}
property String^ Message {
String^ get() { return message; }
}
};
Который вы затем используете следующим образом:
public ref class Class1
{
public:
event EventHandler<MyEventArgs^>^ someEvent;
void ShowMessage(System::String^ message) {
someEvent(this, gcnew MyEventArgs(message));
}
};
Обратите внимание на использование универсального типа EventHandler <> вместо исходного неуниверсального. Это больше кода, чем простой подход, но он очень удобен для программиста клиентского кода, он сразу же узнает, как использовать ваше событие, поскольку оно следует стандартному шаблону.