EventHandler委託類型需要一個EventAr類型的對象gs作爲第二個參數,而不是一個字符串。解決您的問題的快速方法是聲明您自己的代理類型:
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));
}
};
注意使用通用的事件處理程序<的>類型,而不是原始的非泛型的。它比簡單的方法更多的代碼,但它對客戶端代碼編程人員非常友好,他會立即知道如何使用您的事件,因爲它遵循標準模式。
這裏在第二種情況下,我們必須明確定義add remove和raise方法嗎? – 2012-03-14 10:19:38
@ManuDilipShah,不。他們的工作只是喜歡任何其他事件。 – 2012-03-14 10:20:13
感謝您的幫助 – 2012-03-14 10:25:39